<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.5 (Python 3.11.10 on linux)" generated="2026-10-06T01:20:50.557111" rpa="false" schemaversion="5">
<suite id="s1" name="ovsdb-upstream-clustering.txt">
<suite id="s1-s1" name="Southbound Cluster" source="/w/workspace/ovsdb-csit-3node-upstream-clustering-only-chromium/test/csit/suites/ovsdb/Southbound_Cluster">
<suite id="s1-s1-s1" name="Ovsdb Southbound Cluster" source="/w/workspace/ovsdb-csit-3node-upstream-clustering-only-chromium/test/csit/suites/ovsdb/Southbound_Cluster/010__Ovsdb_Southbound_Cluster.robot">
<kw name="Suite Setup" 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-10-06T01:20:51.101888" level="INFO">${SuiteFastFail} = False</msg>
<arg>${SuiteFastFail}</arg>
<arg>False</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-10-06T01:20:51.100279" elapsed="0.001671"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-10-06T01:20:51.099811" elapsed="0.002216"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-10-06T01:20:51.104647" 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-10-06T01:20:51.103364" elapsed="0.001328"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-10-06T01:20:51.104898" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:51.104795" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:51.104765" elapsed="0.000206"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-10-06T01:20:51.105547" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-10-06T01:20:51.105161" elapsed="0.000430"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-10-06T01:20:51.106086" level="INFO">${cluster_size} = 3</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-10-06T01:20:51.105779" elapsed="0.000335"/>
</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-10-06T01:20:51.106731" elapsed="0.000272"/>
</kw>
<msg time="2026-10-06T01:20:51.107103" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:20:51.107148" level="INFO">${possibly_int_of_members} = 3</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:51.106300" elapsed="0.000871"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:20:51.107747" level="INFO">${int_of_members} = 3</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-10-06T01:20:51.107364" elapsed="0.000410"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:20:51.109462" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:20:51.109173" elapsed="0.000317"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:20:51.109905" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:20:51.109637" elapsed="0.000294"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:20:51.110443" 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-10-06T01:20:51.110104" elapsed="0.000366"/>
</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-10-06T01:20:51.111487" elapsed="0.000212"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:20:51.112144" level="INFO">${member_ip} = 10.30.171.109</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:20:51.111859" elapsed="0.000310"/>
</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-10-06T01:20:51.112345" elapsed="0.000244"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:20:51.113386" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:20:51.113105" elapsed="0.000306"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:20:51.113455" elapsed="0.000041"/>
</return>
<msg time="2026-10-06T01:20:51.113602" 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-10-06T01:20:51.112794" elapsed="0.000831"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:20:51.114263" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.171.109:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b840fb91d0&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-10-06T01:20:51.113915" elapsed="0.000518"/>
</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-10-06T01:20:51.114591" elapsed="0.000166"/>
</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-10-06T01:20:51.110923" elapsed="0.003888"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:20:51.110748" elapsed="0.004103"/>
</iter>
<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-10-06T01:20:51.115614" elapsed="0.000166"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:20:51.116214" level="INFO">${member_ip} = 10.30.171.171</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:20:51.115936" elapsed="0.000302"/>
</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-10-06T01:20:51.116415" elapsed="0.000166"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:20:51.117439" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:20:51.117032" elapsed="0.000433"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:20:51.117507" elapsed="0.000029"/>
</return>
<msg time="2026-10-06T01:20:51.117639" level="INFO">${session_alias} = ClusterManagement__session_2</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-10-06T01:20:51.116769" elapsed="0.000893"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:20:51.118151" level="INFO">Creating Session using : alias=ClusterManagement__session_2, url=http://10.30.171.171:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b840fb1e90&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-10-06T01:20:51.117844" elapsed="0.000407"/>
</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-10-06T01:20:51.118424" elapsed="0.000148"/>
</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-10-06T01:20:51.115148" elapsed="0.003477"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:20:51.114984" elapsed="0.003679"/>
</iter>
<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-10-06T01:20:51.119373" elapsed="0.000148"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:20:51.119964" level="INFO">${member_ip} = 10.30.170.97</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:20:51.119672" elapsed="0.000317"/>
</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-10-06T01:20:51.120147" elapsed="0.000177"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:20:51.121041" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:20:51.120769" elapsed="0.000297"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:20:51.121107" elapsed="0.000028"/>
</return>
<msg time="2026-10-06T01:20:51.121235" level="INFO">${session_alias} = ClusterManagement__session_3</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-10-06T01:20:51.120494" elapsed="0.000764"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:20:51.122194" level="INFO">Creating Session using : alias=ClusterManagement__session_3, url=http://10.30.170.97:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b840fc3410&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-10-06T01:20:51.121800" elapsed="0.000518"/>
</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-10-06T01:20:51.122481" elapsed="0.000155"/>
</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-10-06T01:20:51.118922" elapsed="0.003782"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:20:51.118760" elapsed="0.004008"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-10-06T01:20:51.110529" elapsed="0.012274"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-10-06T01:20:51.123404" level="INFO">${ClusterManagement__member_index_list} = [1, 2, 3]</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-10-06T01:20:51.122990" elapsed="0.000454"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-10-06T01:20:51.123997" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.171.109', 2: '10.30.171.171', 3: '10.30.170.97'}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-10-06T01:20:51.123624" elapsed="0.000412"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-10-06T01:20:51.124575" level="INFO">${ClusterManagement__session_list} = ['ClusterManagement__session_1', 'ClusterManagement__session_2', 'ClusterManagement__session_3']</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-10-06T01:20:51.124215" elapsed="0.000400"/>
</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-10-06T01:20:51.108619" elapsed="0.016050"/>
</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-10-06T01:20:51.103007" elapsed="0.021771"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-10-06T01:20:51.124938" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:51.124841" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:51.124823" elapsed="0.000179"/>
</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-10-06T01:20:51.126195" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:20:51.125863" elapsed="0.000358"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:20:51.126656" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:20:51.126383" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:20:51.126737" elapsed="0.000029"/>
</return>
<msg time="2026-10-06T01:20:51.126866" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:20:51.125553" elapsed="0.001335"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:20:51.127763" level="INFO">${member_ip} = 10.30.171.109</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-10-06T01:20:51.127533" elapsed="0.000255"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:51.128765" 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-10-06T01:20:51.128878" 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-10-06T01:20:51.128423" elapsed="0.000480"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:51.132374" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:51.131387" elapsed="0.001088"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:51.131343" elapsed="0.001210"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:51.133279" 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-10-06T01:20:51.133553" 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-10-06T01:20:51.132885" elapsed="0.000786"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:51.134570" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.171.109" 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-10-06T01:20:51.134018" elapsed="0.000726"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:51.135883" 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-10-06T01:20:51.135039" elapsed="0.000958"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:20:51.137404" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:20:51.137476" 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-10-06T01:20:51.137056" elapsed="0.000443"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:51.137735" elapsed="0.000310"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:20:51.138911" level="INFO">Logging into '10.30.171.109:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:20:51.544184" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-194-generic x86_64)

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

 System information as of Tue Oct  6 01:20:46 UTC 2026

  System load:  0.6                Processes:             130
  Usage of /:   14.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.109
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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

New release '24.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


[?2004h[jenkins@releng-54530-105-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-10-06T01:20:51.138643" elapsed="0.405798"/>
</kw>
<msg time="2026-10-06T01:20:51.544528" 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-10-06T01:20:51.138252" elapsed="0.406378"/>
</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-10-06T01:20:51.136371" elapsed="0.408505"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:20:51.545749" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-10-06T01:20:51.558744" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-10-06T01:20:51.559021" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:20:51.559182" 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-10-06T01:20:51.545265" elapsed="0.014050"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:51.559596" elapsed="0.000675"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:51.561949" 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-10-06T01:20:51.561172" elapsed="0.000987"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:20:51.562840" elapsed="0.000045"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:51.562401" elapsed="0.000546"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:51.562330" elapsed="0.000724"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:20:51.563601" elapsed="0.000133"/>
</return>
<status status="PASS" start="2026-10-06T01:20:51.563236" elapsed="0.000568"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:51.563182" elapsed="0.000728"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:20:51.564030" elapsed="0.000022"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:51.565941" elapsed="0.000515"/>
</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-10-06T01:20:51.566884" elapsed="0.000302"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:51.567525" elapsed="0.000230"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:20:51.564941" elapsed="0.002911"/>
</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-10-06T01:20:51.130544" elapsed="0.437580"/>
</kw>
<msg time="2026-10-06T01:20:51.568265" 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-10-06T01:20:51.129918" elapsed="0.438438"/>
</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-10-06T01:20:51.129520" elapsed="0.438936"/>
</kw>
<msg time="2026-10-06T01:20:51.568509" 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-10-06T01:20:51.129055" elapsed="0.439518"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:51.569479" elapsed="0.000462"/>
</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-10-06T01:20:51.570196" elapsed="0.000217"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:51.570609" elapsed="0.000200"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:20:51.568987" elapsed="0.001888"/>
</kw>
<msg time="2026-10-06T01:20:51.570990" 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-10-06T01:20:51.127987" elapsed="0.443035"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:51.571634" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:20:51.571326" elapsed="0.000381"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-10-06T01:20:51.571761" elapsed="0.000037"/>
</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-10-06T01:20:51.127206" elapsed="0.444692"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:20:51.127047" elapsed="0.444944"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:20:51.573138" level="INFO">${member_ip} = 10.30.171.171</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-10-06T01:20:51.572839" elapsed="0.000334"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:51.574225" 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-10-06T01:20:51.574342" 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-10-06T01:20:51.574003" elapsed="0.000364"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:51.577628" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:51.577013" elapsed="0.000731"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:51.576970" elapsed="0.000850"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:51.578524" 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-10-06T01:20:51.578808" 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-10-06T01:20:51.578127" elapsed="0.000800"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:51.579815" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.171.171" 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-10-06T01:20:51.579232" elapsed="0.000731"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:51.580964" level="INFO">${conn_id} = 4</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-10-06T01:20:51.580254" elapsed="0.000825"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:20:51.582585" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:20:51.582654" 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-10-06T01:20:51.582320" elapsed="0.000370"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:51.582882" elapsed="0.000297"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:20:51.584068" level="INFO">Logging into '10.30.171.171:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:20:51.985055" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-194-generic x86_64)

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

 System information as of Tue Oct  6 01:20:34 UTC 2026

  System load:  0.99               Processes:             129
  Usage of /:   14.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.171
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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

New release '24.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


[?2004h[jenkins@releng-54530-105-0-builder-1 ~]&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-10-06T01:20:51.583826" elapsed="0.401345"/>
</kw>
<msg time="2026-10-06T01:20:51.985236" 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-10-06T01:20:51.583397" elapsed="0.401920"/>
</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-10-06T01:20:51.581478" elapsed="0.404017"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:20:51.986309" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-10-06T01:20:51.998530" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-10-06T01:20:51.998872" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:20:51.999113" 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-10-06T01:20:51.985880" elapsed="0.013392"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:51.999668" elapsed="0.000912"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:52.002174" 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-10-06T01:20:52.001452" elapsed="0.001036"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:20:52.003111" elapsed="0.000043"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:52.002728" elapsed="0.000487"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:52.002636" elapsed="0.000701"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:20:52.003987" elapsed="0.000081"/>
</return>
<status status="PASS" start="2026-10-06T01:20:52.003521" elapsed="0.000610"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:52.003465" elapsed="0.000771"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:20:52.004402" elapsed="0.000022"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:52.006266" elapsed="0.000561"/>
</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-10-06T01:20:52.007200" elapsed="0.000303"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:52.007849" elapsed="0.000208"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:20:52.005229" elapsed="0.002922"/>
</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-10-06T01:20:51.576187" elapsed="0.432249"/>
</kw>
<msg time="2026-10-06T01:20:52.008575" 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-10-06T01:20:51.575566" elapsed="0.433078"/>
</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-10-06T01:20:51.575165" elapsed="0.433627"/>
</kw>
<msg time="2026-10-06T01:20:52.008845" 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-10-06T01:20:51.574521" elapsed="0.434383"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:52.009783" elapsed="0.000385"/>
</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-10-06T01:20:52.010431" elapsed="0.000215"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:52.010924" elapsed="0.000125"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:20:52.009299" elapsed="0.001814"/>
</kw>
<msg time="2026-10-06T01:20:52.011227" 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-10-06T01:20:51.573459" elapsed="0.437799"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:52.011932" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:20:52.011571" elapsed="0.000414"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-10-06T01:20:52.012038" elapsed="0.000036"/>
</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-10-06T01:20:51.572367" elapsed="0.439807"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:20:51.572124" elapsed="0.440097"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:20:52.013369" level="INFO">${member_ip} = 10.30.170.97</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-10-06T01:20:52.013041" elapsed="0.000362"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:52.014382" 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-10-06T01:20:52.014507" 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-10-06T01:20:52.014191" elapsed="0.000349"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:52.018737" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:52.018079" elapsed="0.000757"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:52.018038" elapsed="0.000872"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:52.019702" 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-10-06T01:20:52.019965" 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-10-06T01:20:52.019247" elapsed="0.000833"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:52.020997" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.170.97" 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-10-06T01:20:52.020398" elapsed="0.000749"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:52.022302" level="INFO">${conn_id} = 7</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-10-06T01:20:52.021457" elapsed="0.000963"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:20:52.023917" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:20:52.023987" 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-10-06T01:20:52.023640" elapsed="0.000368"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:52.024198" elapsed="0.000303"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:20:52.025379" level="INFO">Logging into '10.30.170.97:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:20:52.441880" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-194-generic x86_64)

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

 System information as of Tue Oct  6 01:20:40 UTC 2026

  System load:  0.72               Processes:             129
  Usage of /:   14.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.97
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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

New release '24.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


[?2004h[jenkins@releng-54530-105-0-builder-2 ~]&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-10-06T01:20:52.025131" elapsed="0.416858"/>
</kw>
<msg time="2026-10-06T01:20:52.442059" 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-10-06T01:20:52.024764" elapsed="0.417365"/>
</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-10-06T01:20:52.022960" elapsed="0.419373"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:20:52.443150" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-10-06T01:20:52.456122" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-10-06T01:20:52.456419" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:20:52.456576" 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-10-06T01:20:52.442719" elapsed="0.013993"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:52.456993" elapsed="0.000582"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:52.458796" 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-10-06T01:20:52.458231" elapsed="0.000720"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:20:52.459400" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:52.459111" elapsed="0.000365"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:52.459060" elapsed="0.000491"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:20:52.459983" elapsed="0.000059"/>
</return>
<status status="PASS" start="2026-10-06T01:20:52.459736" elapsed="0.000351"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:52.459640" elapsed="0.000522"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:20:52.460246" elapsed="0.000015"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:52.461657" elapsed="0.000374"/>
</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-10-06T01:20:52.462319" elapsed="0.000213"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:52.462821" elapsed="0.000153"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:20:52.460926" elapsed="0.002118"/>
</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-10-06T01:20:52.017056" elapsed="0.446181"/>
</kw>
<msg time="2026-10-06T01:20:52.463404" 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-10-06T01:20:52.016068" elapsed="0.447387"/>
</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-10-06T01:20:52.015426" elapsed="0.448101"/>
</kw>
<msg time="2026-10-06T01:20:52.463563" 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-10-06T01:20:52.014765" elapsed="0.448840"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:52.464215" 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-10-06T01:20:52.464756" elapsed="0.000135"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:52.465034" elapsed="0.000092"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:20:52.463890" elapsed="0.001283"/>
</kw>
<msg time="2026-10-06T01:20:52.465252" 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-10-06T01:20:52.013691" elapsed="0.451595"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:52.465732" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:20:52.465492" elapsed="0.000279"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-10-06T01:20:52.465808" elapsed="0.000026"/>
</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-10-06T01:20:52.012589" elapsed="0.453318"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:20:52.012363" elapsed="0.453577"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:20:51.126938" elapsed="1.339038"/>
</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-10-06T01:20:51.125199" elapsed="1.340836"/>
</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-10-06T01:20:52.466184" elapsed="0.000213"/>
</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-10-06T01:20:52.471836" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:52.471747" elapsed="0.000132"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:52.471729" elapsed="0.000170"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:52.472223" 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-10-06T01:20:52.472336" 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-10-06T01:20:52.472098" elapsed="0.000263"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:52.472790" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:20:52.472546" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:52.473228" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:20:52.473014" elapsed="0.000252"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:20:52.473978" 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-10-06T01:20:52.473791" elapsed="0.000376">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-10-06T01:20:52.474265" level="INFO">${status} = FAIL</msg>
<msg time="2026-10-06T01:20:52.474321" 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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:52.473434" elapsed="0.000909"/>
</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-10-06T01:20:52.474625" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:52.474413" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:52.474396" elapsed="0.000334"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:20:52.475374" level="INFO">${ip_address} = 10.30.171.109</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-10-06T01:20:52.475148" elapsed="0.000250"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-10-06T01:20:52.475440" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:20:52.475596" level="INFO">${odl_ip} = 10.30.171.109</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-10-06T01:20:52.474910" elapsed="0.000710"/>
</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-10-06T01:20:52.475810" elapsed="0.000323"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:52.476457" level="INFO">index=10
host=10.30.171.109
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-10-06T01:20:52.476548" level="INFO">${karaf_connection_object} = index=10
host=10.30.171.109
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_err...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-10-06T01:20:52.476353" elapsed="0.000219"/>
</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-10-06T01:20:52.476745" elapsed="0.000238"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-10-06T01:20:52.477378" level="INFO">Logging into '10.30.171.109:8101' as 'karaf'.</msg>
<msg time="2026-10-06T01:20:53.359088" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</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="PASS" start="2026-10-06T01:20:52.477164" elapsed="0.882060"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:53.360735" elapsed="0.000328"/>
</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-10-06T01:20:53.361247" elapsed="0.000166"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:53.361554" elapsed="0.000089"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:20:53.360343" elapsed="0.001373"/>
</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-10-06T01:20:53.359633" elapsed="0.002128"/>
</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="PASS" start="2026-10-06T01:20:52.471494" elapsed="0.890315"/>
</kw>
<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="PASS" start="2026-10-06T01:20:52.467129" elapsed="0.894725"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:52.466762" elapsed="0.895138"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:20:52.466587" elapsed="0.895348"/>
</iter>
<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-10-06T01:20:53.367037" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:53.366939" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:53.366915" elapsed="0.000191"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:53.367441" 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-10-06T01:20:53.367538" 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-10-06T01:20:53.367312" elapsed="0.000250"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:53.368000" 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-10-06T01:20:53.367764" elapsed="0.000277"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:53.368457" level="INFO">2</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:20:53.368225" elapsed="0.000273"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:20:53.369203" level="FAIL">Dictionary does not contain key '2'.</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-10-06T01:20:53.369012" elapsed="0.000328">Dictionary does not contain key '2'.</status>
</kw>
<msg time="2026-10-06T01:20:53.369498" level="INFO">${status} = FAIL</msg>
<msg time="2026-10-06T01:20:53.369540" level="INFO">${old_connection_index} = Dictionary does not contain key '2'.</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:53.368649" elapsed="0.000912"/>
</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-10-06T01:20:53.369856" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:53.369630" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:53.369613" elapsed="0.000334"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:20:53.370587" level="INFO">${ip_address} = 10.30.171.171</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-10-06T01:20:53.370378" elapsed="0.000233"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-10-06T01:20:53.370654" elapsed="0.000050"/>
</return>
<msg time="2026-10-06T01:20:53.370805" level="INFO">${odl_ip} = 10.30.171.171</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-10-06T01:20:53.370125" elapsed="0.000703"/>
</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-10-06T01:20:53.371005" elapsed="0.000333"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:53.371641" level="INFO">index=12
host=10.30.171.171
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-10-06T01:20:53.371746" level="INFO">${karaf_connection_object} = index=12
host=10.30.171.171
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_err...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-10-06T01:20:53.371545" elapsed="0.000226"/>
</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-10-06T01:20:53.371926" elapsed="0.000237"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-10-06T01:20:53.372557" level="INFO">Logging into '10.30.171.171:8101' as 'karaf'.</msg>
<msg time="2026-10-06T01:20:54.080956" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</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="PASS" start="2026-10-06T01:20:53.372359" elapsed="0.708794"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:54.082812" 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-10-06T01:20:54.083335" elapsed="0.000158"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:54.083633" elapsed="0.000117"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:20:54.082412" elapsed="0.001387"/>
</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-10-06T01:20:54.081639" elapsed="0.002203"/>
</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="PASS" start="2026-10-06T01:20:53.366687" elapsed="0.717202"/>
</kw>
<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="PASS" start="2026-10-06T01:20:53.362554" elapsed="0.721379"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:53.362173" elapsed="0.721808"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:20:53.362033" elapsed="0.721985"/>
</iter>
<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-10-06T01:20:54.089146" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:54.089053" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:54.089030" elapsed="0.000260"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:54.089622" 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-10-06T01:20:54.089735" 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-10-06T01:20:54.089495" elapsed="0.000266"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:54.090223" level="INFO">{1: 10, 2: 12}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:20:54.089979" elapsed="0.000302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:54.090715" level="INFO">3</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:20:54.090480" elapsed="0.000276"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:20:54.091458" level="FAIL">Dictionary does not contain key '3'.</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-10-06T01:20:54.091268" elapsed="0.000306">Dictionary does not contain key '3'.</status>
</kw>
<msg time="2026-10-06T01:20:54.091689" level="INFO">${status} = FAIL</msg>
<msg time="2026-10-06T01:20:54.091733" level="INFO">${old_connection_index} = Dictionary does not contain key '3'.</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:54.090909" elapsed="0.000846"/>
</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-10-06T01:20:54.092038" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:54.091824" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:54.091807" elapsed="0.000319"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:20:54.092790" level="INFO">${ip_address} = 10.30.170.97</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-10-06T01:20:54.092560" elapsed="0.000254"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-10-06T01:20:54.092857" elapsed="0.000030"/>
</return>
<msg time="2026-10-06T01:20:54.092984" level="INFO">${odl_ip} = 10.30.170.97</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-10-06T01:20:54.092319" elapsed="0.000687"/>
</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-10-06T01:20:54.093176" elapsed="0.000342"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:54.093841" level="INFO">index=14
host=10.30.170.97
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-10-06T01:20:54.093929" level="INFO">${karaf_connection_object} = index=14
host=10.30.170.97
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-10-06T01:20:54.093742" elapsed="0.000211"/>
</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-10-06T01:20:54.094108" elapsed="0.000249"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-10-06T01:20:54.094751" level="INFO">Logging into '10.30.170.97:8101' as 'karaf'.</msg>
<msg time="2026-10-06T01:20:54.773072" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</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="PASS" start="2026-10-06T01:20:54.094537" elapsed="0.678688"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:54.774856" elapsed="0.000347"/>
</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-10-06T01:20:54.775401" elapsed="0.000160"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:54.775723" elapsed="0.000097"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:20:54.774446" elapsed="0.001424"/>
</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-10-06T01:20:54.773720" elapsed="0.002193"/>
</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="PASS" start="2026-10-06T01:20:54.088799" elapsed="0.687239"/>
</kw>
<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="PASS" start="2026-10-06T01:20:54.084652" elapsed="0.691430"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:54.084274" elapsed="0.691856"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:20:54.084120" elapsed="0.692046"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="PASS" start="2026-10-06T01:20:52.466456" elapsed="2.309745"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-10-06T01:20:51.102415" elapsed="3.673862"/>
</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-10-06T01:20:54.777138" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:54.777045" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:54.777025" elapsed="0.000181"/>
</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-10-06T01:20:54.779073" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:54.778987" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:54.778970" elapsed="0.000168"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:20:54.780029" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:20:54.779659" elapsed="0.000396"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:20:54.780507" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:20:54.780205" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:20:54.780574" elapsed="0.000033"/>
</return>
<msg time="2026-10-06T01:20:54.780727" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:20:54.779355" elapsed="0.001396"/>
</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-10-06T01:20:54.783129" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:54.783037" elapsed="0.000134"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:54.783020" elapsed="0.000172"/>
</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-10-06T01:20:54.784279" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:54.784158" elapsed="0.000234"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:54.784142" elapsed="0.000275"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:20:54.784957" 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-10-06T01:20:54.784562" elapsed="0.000434"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:54.785484" 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-10-06T01:20:54.785260" elapsed="0.000263"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:20:54.895144" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "r "k "s "p "a "c "e "/ "o "v "s "[78Cd "[A[78Cb</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:20:54.787314" elapsed="0.108008"/>
</kw>
<msg time="2026-10-06T01:20:54.895482" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:20:54.895551" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:54.785768" elapsed="0.109835"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:20:55.010388" level="INFO">"- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "o "v "s "d "b "/ "S "o "u "t "h "b "o "u "n "[78Cd "[A[78C_
 "C "l "u "s "t "e "r "/ "0 "1 "0 "_ "_ "O "v "s "d "b "_ "S "o "u "t "h "b "o "u "n "d "_ "C "l "u "s "t "e "r ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:20:54.897272" elapsed="0.113305"/>
</kw>
<msg time="2026-10-06T01:20:55.010761" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:20:55.010832" level="INFO">${message_wait} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:54.895884" elapsed="0.115049"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:55.011415" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:55.011113" elapsed="0.000446"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.011088" elapsed="0.000499"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:55.012334" level="INFO"> "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "o "v "s "d "b "/ "S "o "u "t "h "b "o "u "n "[78Cd "[A[78C_
 "C "l "u "s "t "e "r "/ "0 "1 "0 "_ "_ "O "v "s "d "b "_ "S "o "u "t "h "b "o "u "n "d "_ "C "l "u "s "t "e "r ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:20:55.011796" elapsed="0.000668"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:55.012870" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:55.012587" elapsed="0.000436"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.012568" elapsed="0.000480"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:20:55.013084" elapsed="0.000035"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:55.015168" elapsed="0.000294"/>
</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-10-06T01:20:55.015706" elapsed="0.000155"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:55.016048" 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-10-06T01:20:55.014493" elapsed="0.001768"/>
</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-10-06T01:20:55.013407" elapsed="0.002956"/>
</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="PASS" start="2026-10-06T01:20:54.783952" elapsed="0.232487"/>
</kw>
<msg time="2026-10-06T01:20:55.016522" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:20:55.016563" level="INFO">${message} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:54.783351" elapsed="0.233247"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:20:55.016768" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:20:55.016666" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.016649" elapsed="0.000197"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:20:55.017207" elapsed="0.000024"/>
</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-10-06T01:20:55.017595" elapsed="0.000030"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:20:55.017699" 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="PASS" start="2026-10-06T01:20:54.782803" elapsed="0.235015"/>
</kw>
<msg time="2026-10-06T01:20:55.017936" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:20:55.017993" level="INFO">${output} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:54.781098" elapsed="0.236944"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:55.018449" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:55.018142" elapsed="0.000374"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.018118" elapsed="0.000428"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:20:54.780960" elapsed="0.237616"/>
</iter>
<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-10-06T01:20:55.021726" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:55.021581" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.021555" elapsed="0.000258"/>
</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-10-06T01:20:55.022950" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:55.022839" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.022819" elapsed="0.000300"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:20:55.023673" level="INFO">${karaf_connection_index} = 12</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-10-06T01:20:55.023284" elapsed="0.000450"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:55.024190" 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-10-06T01:20:55.023975" elapsed="0.000253"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:20:55.131530" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "r "k "s "p "a "c "e "/ "o "v "s "[78Cd "[A[78Cb</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:20:55.026021" elapsed="0.105702"/>
</kw>
<msg time="2026-10-06T01:20:55.131894" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:20:55.131967" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:55.024463" elapsed="0.107557"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:20:55.264701" level="INFO">"- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "o "v "s "d "b "/ "S "o "u "t "h "b "o "u "n "[78Cd "[A[78C_
 "C "l "u "s "t "e "r "/ "0 "1 "0 "_ "_ "O "v "s "d "b "_ "S "o "u "t "h "b "o "u "n "d "_ "C "l "u "s "t "e "r ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:20:55.133764" elapsed="0.131203"/>
</kw>
<msg time="2026-10-06T01:20:55.265166" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:20:55.265252" level="INFO">${message_wait} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:55.132327" elapsed="0.132979"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:55.265861" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:55.265505" elapsed="0.000505"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.265468" elapsed="0.000573"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:55.266813" level="INFO"> "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "o "v "s "d "b "/ "S "o "u "t "h "b "o "u "n "[78Cd "[A[78C_
 "C "l "u "s "t "e "r "/ "0 "1 "0 "_ "_ "O "v "s "d "b "_ "S "o "u "t "h "b "o "u "n "d "_ "C "l "u "s "t "e "r ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:20:55.266225" elapsed="0.000720"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:55.267553" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:55.267297" elapsed="0.000420"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.267049" elapsed="0.000695"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:20:55.267780" elapsed="0.000034"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:55.269967" elapsed="0.000292"/>
</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-10-06T01:20:55.270487" elapsed="0.000157"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:55.270895" elapsed="0.000097"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:20:55.269226" elapsed="0.001871"/>
</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-10-06T01:20:55.268095" elapsed="0.003102"/>
</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="PASS" start="2026-10-06T01:20:55.022595" elapsed="0.248691"/>
</kw>
<msg time="2026-10-06T01:20:55.271370" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:20:55.271411" level="INFO">${message} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:55.022018" elapsed="0.249429"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:20:55.271601" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:20:55.271516" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.271499" elapsed="0.000238"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:55.272098" elapsed="0.000025"/>
</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-10-06T01:20:55.272542" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:20:55.272610" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:20:55.021259" elapsed="0.251463"/>
</kw>
<msg time="2026-10-06T01:20:55.272821" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:20:55.272866" level="INFO">${output} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:55.018953" elapsed="0.253955"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:55.273207" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:55.272982" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.272964" elapsed="0.000332"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:20:55.018757" elapsed="0.254561"/>
</iter>
<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-10-06T01:20:55.275669" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:55.275583" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.275566" elapsed="0.000188"/>
</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-10-06T01:20:55.276816" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:55.276674" elapsed="0.000255"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.276656" elapsed="0.000299"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:20:55.277489" level="INFO">${karaf_connection_index} = 14</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-10-06T01:20:55.277102" elapsed="0.000426"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:55.277997" 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-10-06T01:20:55.277784" elapsed="0.000250"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:20:55.392913" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "r "k "s "p "a "c "e "/ "o "v "s "[78Cd "[A[78Cb</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:20:55.279699" elapsed="0.113571"/>
</kw>
<msg time="2026-10-06T01:20:55.393606" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:20:55.393802" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:55.278268" elapsed="0.115648"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:20:55.572422" level="INFO">"- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "o "v "s "d "b "/ "S "o "u "t "h "b "o "u "n "[78Cd "[A[78C_
 "C "l "u "s "t "e "r "/ "0 "1 "0 "_ "_ "O "v "s "d "b "_ "S "o "u "t "h "b "o "u "n "d "_ "C "l "u "s "t "e "r ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:20:55.397659" elapsed="0.174997"/>
</kw>
<msg time="2026-10-06T01:20:55.572878" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:20:55.572949" level="INFO">${message_wait} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:55.394521" elapsed="0.178479"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:55.573557" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:55.573205" elapsed="0.000518"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.573167" elapsed="0.000586"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:55.574555" level="INFO"> "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "o "v "s "d "b "/ "S "o "u "t "h "b "o "u "n "[78Cd "[A[78C_
 "C "l "u "s "t "e "r "/ "0 "1 "0 "_ "_ "O "v "s "d "b "_ "S "o "u "t "h "b "o "u "n "d "_ "C "l "u "s "t "e "r ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:20:55.573971" elapsed="0.000721"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:55.575064" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:55.574818" elapsed="0.000385"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.574799" elapsed="0.000429"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:20:55.575332" elapsed="0.000039"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:55.577651" elapsed="0.000303"/>
</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-10-06T01:20:55.578184" elapsed="0.000315"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:55.578713" elapsed="0.000097"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:20:55.576775" elapsed="0.002141"/>
</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-10-06T01:20:55.575657" elapsed="0.003360"/>
</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="PASS" start="2026-10-06T01:20:55.276468" elapsed="0.302627"/>
</kw>
<msg time="2026-10-06T01:20:55.579180" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:20:55.579220" level="INFO">${message} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:55.275901" elapsed="0.303367"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:20:55.579427" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-10-06T01:20:55.579341" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.579323" elapsed="0.000185"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:55.579896" elapsed="0.000025"/>
</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-10-06T01:20:55.580260" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:20:55.580327" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:20:55.275342" elapsed="0.305069"/>
</kw>
<msg time="2026-10-06T01:20:55.580495" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:20:55.580535" level="INFO">${output} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:55.273576" elapsed="0.306993"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:55.580870" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:55.580638" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.580622" elapsed="0.000319"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:20:55.273436" elapsed="0.307526"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:20:54.780806" elapsed="0.800212"/>
</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-10-06T01:20:54.778745" elapsed="0.802329"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-10-06T01:20:54.776862" elapsed="0.804274"/>
</kw>
<arg>KarafKeywords.Log_Test_Suite_Start_To_Controller_Karaf</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:54.776431" elapsed="0.804744"/>
</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-10-06T01:20:51.099469" elapsed="4.481754"/>
</kw>
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-10-06T01:20:55.582090" level="INFO">${already_done} = True</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-10-06T01:20:55.581784" elapsed="0.000330"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="PASS" start="2026-10-06T01:20:55.582269" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:20:55.582181" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.582164" elapsed="0.000177"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:55.582515" elapsed="0.000019"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<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="NOT RUN" start="2026-10-06T01:20:55.582709" elapsed="0.000020"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<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 errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:55.582879" elapsed="0.000031"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<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="NOT RUN" start="2026-10-06T01:20:55.583089" elapsed="0.000027"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<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="NOT RUN" start="2026-10-06T01:20:55.583395" elapsed="0.000023"/>
</kw>
<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-10-06T01:20:55.581486" elapsed="0.001989"/>
</kw>
<status status="PASS" start="2026-10-06T01:20:51.099091" elapsed="4.484429"/>
</kw>
<test id="s1-s1-s1-t1" name="Check Shards Status Before Fail" line="17">
<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-10-06T01:20:55.585112" elapsed="0.000241"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:20:55.584834" elapsed="0.000572"/>
</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-10-06T01:20:55.586344" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:55.586255" elapsed="0.000132"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.586222" elapsed="0.000185"/>
</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-10-06T01:20:55.588493" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:55.588408" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.588391" elapsed="0.000164"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:20:55.589527" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:20:55.589126" elapsed="0.000427"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:20:55.589992" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:20:55.589720" elapsed="0.000296"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:20:55.590057" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:20:55.590183" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:20:55.588774" elapsed="0.001431"/>
</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-10-06T01:20:55.592795" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:55.592708" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.592689" elapsed="0.000168"/>
</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-10-06T01:20:55.594078" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:55.593995" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.593978" elapsed="0.000161"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:20:55.594530" 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-10-06T01:20:55.594295" elapsed="0.000260"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:55.594907" 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-10-06T01:20:55.594731" elapsed="0.000199"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:20:55.666525" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:20:55.595511" elapsed="0.071263"/>
</kw>
<msg time="2026-10-06T01:20:55.666973" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:20:55.667015" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:55.595081" elapsed="0.071969"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:20:55.747818" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "B "e "f "[78Co "[A[78Cr
 "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:20:55.667800" elapsed="0.080341"/>
</kw>
<msg time="2026-10-06T01:20:55.748408" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:20:55.748450" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:55.667275" elapsed="0.081211"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:55.749046" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:55.748704" elapsed="0.000425"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.748634" elapsed="0.000523"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:55.749842" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "B "e "f "[78Co "[A[78Cr
 "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:20:55.749358" elapsed="0.000567"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:55.750188" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:55.749988" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.749971" elapsed="0.000330"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:20:55.750338" elapsed="0.000039"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:55.753076" elapsed="0.000505"/>
</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-10-06T01:20:55.754874" elapsed="0.000702"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:55.756811" elapsed="0.000331"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:20:55.751264" elapsed="0.005948"/>
</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-10-06T01:20:55.750690" elapsed="0.006661"/>
</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="PASS" start="2026-10-06T01:20:55.593732" elapsed="0.163696"/>
</kw>
<msg time="2026-10-06T01:20:55.757511" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:20:55.757551" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:55.593001" elapsed="0.164586"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:20:55.757759" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:20:55.757657" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.757639" elapsed="0.000199"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:20:55.758169" elapsed="0.000026"/>
</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-10-06T01:20:55.758491" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:20:55.758556" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:20:55.592403" elapsed="0.166238"/>
</kw>
<msg time="2026-10-06T01:20:55.758757" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:20:55.758800" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:55.590565" elapsed="0.168271"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:55.759129" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:55.758906" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.758890" elapsed="0.000311"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:20:55.590424" elapsed="0.168799"/>
</iter>
<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-10-06T01:20:55.761705" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:55.761598" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.761580" elapsed="0.000190"/>
</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-10-06T01:20:55.763215" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:55.763129" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.763112" elapsed="0.000180"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:20:55.763669" level="INFO">${karaf_connection_index} = 12</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-10-06T01:20:55.763435" elapsed="0.000275"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:55.764105" 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-10-06T01:20:55.763906" elapsed="0.000223"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:20:55.830984" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:20:55.764754" elapsed="0.066401"/>
</kw>
<msg time="2026-10-06T01:20:55.831326" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:20:55.831368" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:55.764297" elapsed="0.067106"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:20:55.915520" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "B "e "f "[78Co "[A[78Cr
 "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:20:55.832031" elapsed="0.083737"/>
</kw>
<msg time="2026-10-06T01:20:55.915965" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:20:55.916007" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:55.831566" elapsed="0.084475"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:55.916406" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:55.916132" elapsed="0.000350"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.916104" elapsed="0.000404"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:55.917098" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "B "e "f "[78Co "[A[78Cr
 "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:20:55.916710" elapsed="0.000469"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:55.917458" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:55.917260" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.917224" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:20:55.917585" elapsed="0.000034"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:55.920199" elapsed="0.000526"/>
</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-10-06T01:20:55.921969" elapsed="0.000489"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:55.923657" elapsed="0.000519"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:20:55.918464" elapsed="0.005796"/>
</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-10-06T01:20:55.917926" elapsed="0.006454"/>
</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="PASS" start="2026-10-06T01:20:55.762548" elapsed="0.161910"/>
</kw>
<msg time="2026-10-06T01:20:55.924538" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:20:55.924577" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:55.761919" elapsed="0.162693"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:20:55.924828" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:20:55.924726" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.924664" elapsed="0.000241"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:55.925222" elapsed="0.000038"/>
</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-10-06T01:20:55.925536" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:20:55.925645" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:20:55.761299" elapsed="0.164702"/>
</kw>
<msg time="2026-10-06T01:20:55.926085" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:20:55.926124" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:55.759499" elapsed="0.166660"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:55.926458" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:55.926228" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.926212" elapsed="0.000317"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:20:55.759359" elapsed="0.167192"/>
</iter>
<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-10-06T01:20:55.928925" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:55.928840" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.928824" elapsed="0.000163"/>
</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-10-06T01:20:55.930084" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:55.930001" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:55.929984" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:20:55.930645" level="INFO">${karaf_connection_index} = 14</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-10-06T01:20:55.930413" elapsed="0.000256"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:55.931023" 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-10-06T01:20:55.930848" elapsed="0.000199"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:20:56.006711" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:20:55.931623" elapsed="0.075269"/>
</kw>
<msg time="2026-10-06T01:20:56.007052" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:20:56.007093" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:55.931198" elapsed="0.075930"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:20:56.097302" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "B "e "f "[78Co "[A[78Cr
 "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:20:56.007747" elapsed="0.089879"/>
</kw>
<msg time="2026-10-06T01:20:56.097900" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:20:56.097945" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:56.007304" elapsed="0.090679"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:56.098451" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:56.098107" elapsed="0.000423"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:56.098069" elapsed="0.000492"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:56.099224" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "B "e "f "[78Co "[A[78Cr
 "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:20:56.098764" elapsed="0.000552"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:56.099593" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:56.099380" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:56.099363" elapsed="0.000349"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:20:56.099750" elapsed="0.000039"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:56.102499" elapsed="0.000521"/>
</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-10-06T01:20:56.104392" elapsed="0.000663"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:56.106258" elapsed="0.000605"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:20:56.100661" elapsed="0.006274"/>
</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-10-06T01:20:56.100088" elapsed="0.006967"/>
</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="PASS" start="2026-10-06T01:20:55.929746" elapsed="0.177389"/>
</kw>
<msg time="2026-10-06T01:20:56.107219" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:20:56.107273" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:55.929132" elapsed="0.178177"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:20:56.107469" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:20:56.107381" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:56.107363" elapsed="0.000185"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:56.107902" elapsed="0.000025"/>
</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-10-06T01:20:56.108216" elapsed="0.000034"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:20:56.108293" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:20:55.928532" elapsed="0.179848"/>
</kw>
<msg time="2026-10-06T01:20:56.108467" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:20:56.108507" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:55.926820" elapsed="0.181722"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:56.108965" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:56.108611" elapsed="0.000416"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:56.108594" elapsed="0.000462"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:20:55.926666" elapsed="0.182417"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:20:55.590273" elapsed="0.518850"/>
</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-10-06T01:20:55.588094" elapsed="0.521091"/>
</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-10-06T01:20:55.585982" elapsed="0.523275"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:55.585549" elapsed="0.523753"/>
</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-10-06T01:20:55.584459" elapsed="0.524894"/>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:20:56.117038" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:20:56.116794" elapsed="0.000281">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:20:56.116386" elapsed="0.000821">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:20:56.117271" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:20:56.113445" elapsed="0.003873"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:20:56.113073" elapsed="0.004333">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:56.117626" elapsed="0.000021"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:56.117868" elapsed="0.000093"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:56.118162" elapsed="0.000022"/>
</kw>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:20:56.109569" elapsed="0.008714">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:20:55.583606" elapsed="0.534826">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</test>
<test id="s1-s1-s1-t2" name="Start OVS Multiple Connections" line="21">
<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-10-06T01:20:56.119941" elapsed="0.000213"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:20:56.119667" elapsed="0.000537"/>
</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-10-06T01:20:56.121130" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:56.121035" elapsed="0.000137"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:56.121016" elapsed="0.000176"/>
</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-10-06T01:20:56.123294" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:56.123195" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:56.123178" elapsed="0.000178"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:20:56.124287" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:20:56.123940" elapsed="0.000374"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:20:56.124753" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:20:56.124465" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:20:56.124818" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:20:56.124943" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:20:56.123562" elapsed="0.001403"/>
</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-10-06T01:20:56.127410" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:56.127323" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:56.127305" elapsed="0.000168"/>
</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-10-06T01:20:56.128571" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:56.128485" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:56.128468" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:20:56.129047" 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-10-06T01:20:56.128809" elapsed="0.000262"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:56.129415" 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-10-06T01:20:56.129241" elapsed="0.000199"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:20:56.203696" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:20:56.130028" elapsed="0.073877"/>
</kw>
<msg time="2026-10-06T01:20:56.204093" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:20:56.204136" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:56.129591" elapsed="0.074585"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:20:56.306134" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "t "a "r "t "[C "O "V "S "[C "M "u "l "t "i "p "l "e "[C "C "o "n "n "[78Ce "[A[78Cc
 "t "i "o "n "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:20:56.204879" elapsed="0.101463"/>
</kw>
<msg time="2026-10-06T01:20:56.306506" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:20:56.306548" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:56.204384" elapsed="0.102256"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:56.306978" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:56.306749" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:56.306724" elapsed="0.000357"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:56.307630" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "t "a "r "t "[C "O "V "S "[C "M "u "l "t "i "p "l "e "[C "C "o "n "n "[78Ce "[A[78Cc
 "t "i "o "n "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:20:56.307276" elapsed="0.000449"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:56.307987" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:56.307788" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:56.307771" elapsed="0.000310"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:20:56.308116" elapsed="0.000035"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:56.310805" elapsed="0.000517"/>
</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-10-06T01:20:56.312608" elapsed="0.000686"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:56.314705" elapsed="0.000323"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:20:56.308992" elapsed="0.006104"/>
</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-10-06T01:20:56.308441" elapsed="0.006775"/>
</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="PASS" start="2026-10-06T01:20:56.128211" elapsed="0.187096"/>
</kw>
<msg time="2026-10-06T01:20:56.315389" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:20:56.315429" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:56.127618" elapsed="0.187846"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:20:56.315625" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:20:56.315534" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:56.315517" elapsed="0.000257"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:20:56.316111" elapsed="0.000024"/>
</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-10-06T01:20:56.316426" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:20:56.316491" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:20:56.127017" elapsed="0.189558"/>
</kw>
<msg time="2026-10-06T01:20:56.316657" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:20:56.316714" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:56.125321" elapsed="0.191430"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:56.317040" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:56.316820" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:56.316804" elapsed="0.000308"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:20:56.125168" elapsed="0.191965"/>
</iter>
<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-10-06T01:20:56.319655" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:56.319564" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:56.319546" elapsed="0.000188"/>
</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-10-06T01:20:56.320851" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:56.320760" elapsed="0.000132"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:56.320743" elapsed="0.000170"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:20:56.321371" level="INFO">${karaf_connection_index} = 12</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-10-06T01:20:56.321120" elapsed="0.000276"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:56.321748" 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-10-06T01:20:56.321556" elapsed="0.000217"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:20:56.391796" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:20:56.322364" elapsed="0.069644"/>
</kw>
<msg time="2026-10-06T01:20:56.392196" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:20:56.392251" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:56.321926" elapsed="0.070362"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:20:56.468019" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "t "a "r "t "[C "O "V "S "[C "M "u "l "t "i "p "l "e "[C "C "o "n "n "[78Ce "[A[78Cc
 "t "i "o "n "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:20:56.393020" elapsed="0.075255"/>
</kw>
<msg time="2026-10-06T01:20:56.468481" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:20:56.468523" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:56.392507" elapsed="0.076051"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:56.468981" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:56.468664" elapsed="0.000395"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:56.468632" elapsed="0.000455"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:56.469710" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "t "a "r "t "[C "O "V "S "[C "M "u "l "t "i "p "l "e "[C "C "o "n "n "[78Ce "[A[78Cc
 "t "i "o "n "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:20:56.469289" elapsed="0.000501"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:56.470050" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:56.469852" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:56.469836" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:20:56.470179" elapsed="0.000037"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:56.472863" elapsed="0.000505"/>
</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-10-06T01:20:56.474615" elapsed="0.000502"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:56.476339" elapsed="0.002132"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:20:56.471081" elapsed="0.007462"/>
</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-10-06T01:20:56.470521" elapsed="0.008143"/>
</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="PASS" start="2026-10-06T01:20:56.320474" elapsed="0.158349"/>
</kw>
<msg time="2026-10-06T01:20:56.478907" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:20:56.478947" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:56.319880" elapsed="0.159103"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:20:56.479143" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:20:56.479055" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:56.479037" elapsed="0.000199"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:56.479561" elapsed="0.000025"/>
</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-10-06T01:20:56.479880" elapsed="0.000072"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:20:56.479997" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:20:56.319267" elapsed="0.160816"/>
</kw>
<msg time="2026-10-06T01:20:56.480167" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:20:56.480206" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:56.317401" elapsed="0.162853"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:56.480541" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:56.480324" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:56.480308" elapsed="0.000305"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:20:56.317262" elapsed="0.163372"/>
</iter>
<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-10-06T01:20:56.483033" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:56.482947" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:56.482930" elapsed="0.000165"/>
</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-10-06T01:20:56.484222" elapsed="0.000026"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:56.484138" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:56.484121" elapsed="0.000177"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:20:56.484668" level="INFO">${karaf_connection_index} = 14</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-10-06T01:20:56.484439" elapsed="0.000271"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:56.485040" 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-10-06T01:20:56.484869" elapsed="0.000196"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:20:56.561080" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:20:56.485643" elapsed="0.075675"/>
</kw>
<msg time="2026-10-06T01:20:56.561489" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:20:56.561532" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:56.485215" elapsed="0.076353"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:20:56.636321" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "t "a "r "t "[C "O "V "S "[C "M "u "l "t "i "p "l "e "[C "C "o "n "n "[78Ce "[A[78Cc
 "t "i "o "n "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:20:56.562297" elapsed="0.074201"/>
</kw>
<msg time="2026-10-06T01:20:56.636657" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:20:56.636722" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:56.561801" elapsed="0.074957"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:56.637042" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:56.636830" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:56.636811" elapsed="0.000327"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:56.637690" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "t "a "r "t "[C "O "V "S "[C "M "u "l "t "i "p "l "e "[C "C "o "n "n "[78Ce "[A[78Cc
 "t "i "o "n "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:20:56.637331" elapsed="0.000440"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:56.638028" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:56.637832" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:56.637816" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:20:56.638151" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:56.640731" elapsed="0.000477"/>
</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-10-06T01:20:56.642503" elapsed="0.000493"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:56.644389" elapsed="0.000465"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:20:56.638970" elapsed="0.005953"/>
</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-10-06T01:20:56.638450" elapsed="0.006590"/>
</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="PASS" start="2026-10-06T01:20:56.483881" elapsed="0.161235"/>
</kw>
<msg time="2026-10-06T01:20:56.645198" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:20:56.645250" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:56.483252" elapsed="0.162034"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:20:56.645442" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:20:56.645357" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:56.645339" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:56.645917" elapsed="0.000025"/>
</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-10-06T01:20:56.646235" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:20:56.646301" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:20:56.482632" elapsed="0.163753"/>
</kw>
<msg time="2026-10-06T01:20:56.646467" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:20:56.646506" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:56.480938" elapsed="0.165602"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:56.646840" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:56.646607" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:56.646591" elapsed="0.000320"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:20:56.480799" elapsed="0.166133"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:20:56.125020" elapsed="0.521939"/>
</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-10-06T01:20:56.122897" elapsed="0.524113"/>
</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-10-06T01:20:56.120765" elapsed="0.526294"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:20:56.120360" elapsed="0.526740"/>
</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-10-06T01:20:56.119317" elapsed="0.527828"/>
</kw>
<kw name="Add Multiple Managers to OVS" owner="OVSDB">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:20:56.649832" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:20:56.649487" elapsed="0.000371"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:20:56.650298" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:20:56.650008" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:20:56.650362" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:20:56.650485" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${controller_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-10-06T01:20:56.649096" elapsed="0.001412"/>
</kw>
<kw name="Clean Mininet System" owner="Utils">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:56.652640" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:56.652407" elapsed="0.000331"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:56.652389" elapsed="0.000374"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:56.653087" 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-10-06T01:20:56.653178" 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-10-06T01:20:56.652954" elapsed="0.000248"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:56.653703" level="INFO">Attempting to execute command "sudo mn -c" on remote system "10.30.170.234" 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-10-06T01:20:56.653405" elapsed="0.000342"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:56.654309" level="INFO">${conn_id} = 25</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-10-06T01:20:56.653920" elapsed="0.000414"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:20:56.655217" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:20:56.655299" 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-10-06T01:20:56.654899" elapsed="0.000422"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:56.655468" elapsed="0.000344"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:20:56.656851" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:20:57.337275" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:20:56 UTC 2026

  System load:  0.16               Processes:             110
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


[?2004h[jenkins@releng-54530-105-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-10-06T01:20:56.656598" elapsed="0.680862"/>
</kw>
<msg time="2026-10-06T01:20:57.337568" 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-10-06T01:20:56.655974" elapsed="0.681696"/>
</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-10-06T01:20:56.654528" elapsed="0.683304"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:20:57.338523" level="INFO">Executing command 'sudo mn -c'.</msg>
<msg time="2026-10-06T01:20:58.558087" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:20:58.558457" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:20:58.558549" level="INFO">${stderr} = *** Removing excess controllers/ofprotocols/ofdatapaths/pings/noxes
killall controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec iv...</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-10-06T01:20:57.338199" elapsed="1.220404"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:58.559116" elapsed="0.000803"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:58.561073" level="INFO">*** Removing excess controllers/ofprotocols/ofdatapaths/pings/noxes
killall controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec ivs ryu-manager 2&gt; /dev/null
killall -9 controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec ivs ryu-manager 2&gt; /dev/null
pkill -9 -f "sudo mnexec"
*** Removing junk from /tmp
rm -f /tmp/vconn* /tmp/vlogs* /tmp/*.out /tmp/*.log
*** Removing old X11 tunnels
*** Removing excess kernel datapaths
ps ax | egrep -o 'dp[0-9]+' | sed 's/dp/nl:/'
***  Removing OVS datapaths
ovs-vsctl --timeout=1 list-br
ovs-vsctl --timeout=1 list-br
*** Removing all links of the pattern foo-ethX
ip link show | egrep -o '([-_.[:alnum:]]+-eth[[:digit:]]+)'
ip link show
*** Killing stale mininet node processes
pkill -9 -f mininet:
*** Shutting down stale tunnels
pkill -9 -f Tunnel=Ethernet
pkill -9 -f .ssh/mn
rm -f ~/.ssh/mn/*
*** Cleanup complete.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:20:58.560445" elapsed="0.000744"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:20:58.561612" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:58.561374" elapsed="0.000370"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:58.561326" elapsed="0.000469"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:20:58.562095" elapsed="0.000061"/>
</return>
<status status="PASS" start="2026-10-06T01:20:58.561908" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:58.561874" elapsed="0.000427"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:20:58.562370" elapsed="0.000030"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:58.564126" elapsed="0.000702"/>
</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-10-06T01:20:58.565256" elapsed="0.000318"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:58.565918" elapsed="0.000201"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:20:58.563055" elapsed="0.003192"/>
</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-10-06T01:20:56.651950" elapsed="1.914453"/>
</kw>
<msg time="2026-10-06T01:20:58.566509" 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-10-06T01:20:56.651433" elapsed="1.915177"/>
</kw>
<arg>${system}</arg>
<arg>sudo mn -c</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:20:56.651013" elapsed="1.915785"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:58.570918" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:58.570356" elapsed="0.000680"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:58.570317" elapsed="0.000769"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:58.571830" 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-10-06T01:20:58.572039" 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-10-06T01:20:58.571533" elapsed="0.000560"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:58.573216" level="INFO">Attempting to execute command "sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh" on remote system "10.30.170.234" 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-10-06T01:20:58.572526" elapsed="0.000787"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:58.574409" level="INFO">${conn_id} = 27</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-10-06T01:20:58.573727" elapsed="0.000736"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:20:58.576673" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:20:58.576861" 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-10-06T01:20:58.575760" elapsed="0.001151"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:58.577268" elapsed="0.000670"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:20:58.579810" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:20:58.989013" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:20:56 UTC 2026

  System load:  0.16               Processes:             110
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:20:57 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:20:58.579234" elapsed="0.409921"/>
</kw>
<msg time="2026-10-06T01:20:58.989320" 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-10-06T01:20:58.578354" elapsed="0.411047"/>
</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-10-06T01:20:58.574919" elapsed="0.414586"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:20:58.990031" level="INFO">Executing command 'sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh'.</msg>
<msg time="2026-10-06T01:20:59.043376" level="INFO">Command exited with return code -1.</msg>
<msg time="2026-10-06T01:20:59.043752" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:20:59.043843" level="INFO">${stderr} = </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-10-06T01:20:58.989795" elapsed="0.054094"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:59.044263" elapsed="0.000475"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:59.045849" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:20:59.045252" elapsed="0.000683"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:20:59.046360" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:59.046096" elapsed="0.000367"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:59.046046" elapsed="0.000468"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:20:59.046834" elapsed="0.000055"/>
</return>
<status status="PASS" start="2026-10-06T01:20:59.046621" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:59.046590" elapsed="0.000416"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:20:59.047072" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:59.048722" elapsed="0.000669"/>
</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-10-06T01:20:59.049826" elapsed="0.000312"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:59.050472" elapsed="0.000196"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:20:59.047774" elapsed="0.003031"/>
</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-10-06T01:20:58.569365" elapsed="0.481594"/>
</kw>
<msg time="2026-10-06T01:20:59.051062" 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-10-06T01:20:58.568149" elapsed="0.483012"/>
</kw>
<arg>${system}</arg>
<arg>sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:20:58.567166" elapsed="0.484180"/>
</kw>
<arg>${tools_system}</arg>
<status status="PASS" start="2026-10-06T01:20:56.650701" elapsed="2.400757"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:20:59.052350" level="INFO">${ovs_opt} = </msg>
<var>${ovs_opt}</var>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:20:59.051810" elapsed="0.000593"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Catenate" owner="BuiltIn">
<msg time="2026-10-06T01:20:59.053923" level="INFO">${ovs_opt} =   tcp:10.30.171.109:6640</msg>
<var>${ovs_opt}</var>
<arg>${ovs_opt}</arg>
<arg>${SPACE}tcp:${ODL_SYSTEM_${index}_IP}:${ovs_mgr_port}</arg>
<doc>Concatenates the given items together and returns the resulted string.</doc>
<status status="PASS" start="2026-10-06T01:20:59.053132" elapsed="0.000846"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:59.054944" level="INFO">  tcp:10.30.171.109:6640</msg>
<arg>${ovs_opt}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:20:59.054423" elapsed="0.000610"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:20:59.052824" elapsed="0.002279"/>
</iter>
<iter>
<kw name="Catenate" owner="BuiltIn">
<msg time="2026-10-06T01:20:59.056596" level="INFO">${ovs_opt} =   tcp:10.30.171.109:6640  tcp:10.30.171.171:6640</msg>
<var>${ovs_opt}</var>
<arg>${ovs_opt}</arg>
<arg>${SPACE}tcp:${ODL_SYSTEM_${index}_IP}:${ovs_mgr_port}</arg>
<doc>Concatenates the given items together and returns the resulted string.</doc>
<status status="PASS" start="2026-10-06T01:20:59.055629" elapsed="0.001022"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:59.057606" level="INFO">  tcp:10.30.171.109:6640  tcp:10.30.171.171:6640</msg>
<arg>${ovs_opt}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:20:59.057103" elapsed="0.000624"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:20:59.055325" elapsed="0.002470"/>
</iter>
<iter>
<kw name="Catenate" owner="BuiltIn">
<msg time="2026-10-06T01:20:59.059053" level="INFO">${ovs_opt} =   tcp:10.30.171.109:6640  tcp:10.30.171.171:6640  tcp:10.30.170.97:6640</msg>
<var>${ovs_opt}</var>
<arg>${ovs_opt}</arg>
<arg>${SPACE}tcp:${ODL_SYSTEM_${index}_IP}:${ovs_mgr_port}</arg>
<doc>Concatenates the given items together and returns the resulted string.</doc>
<status status="PASS" start="2026-10-06T01:20:59.058301" elapsed="0.000808"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:59.060066" level="INFO">  tcp:10.30.171.109:6640  tcp:10.30.171.171:6640  tcp:10.30.170.97:6640</msg>
<arg>${ovs_opt}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:20:59.059553" elapsed="0.000603"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:20:59.057973" elapsed="0.002273"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:20:59.052520" elapsed="0.007787"/>
</for>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:59.064924" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:59.064367" elapsed="0.000668"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:59.064327" elapsed="0.000740"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:59.065604" 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-10-06T01:20:59.065755" 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-10-06T01:20:59.065371" elapsed="0.000420"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:59.066470" level="INFO">Attempting to execute command "sudo ovs-vsctl set-manager   tcp:10.30.171.109:6640  tcp:10.30.171.171:6640  tcp:10.30.170.97:6640" on remote system "10.30.170.234" 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-10-06T01:20:59.066053" elapsed="0.000476"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:59.067317" level="INFO">${conn_id} = 29</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-10-06T01:20:59.066878" elapsed="0.000473"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:20:59.068507" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:20:59.068604" 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-10-06T01:20:59.068133" elapsed="0.000502"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:59.068864" elapsed="0.000431"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:20:59.070389" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:20:59.471778" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:20:56 UTC 2026

  System load:  0.16               Processes:             110
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:20:58 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:20:59.070050" elapsed="0.401887"/>
</kw>
<msg time="2026-10-06T01:20:59.472024" 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-10-06T01:20:59.069521" elapsed="0.402590"/>
</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-10-06T01:20:59.067619" elapsed="0.404620"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:20:59.472801" level="INFO">Executing command 'sudo ovs-vsctl set-manager   tcp:10.30.171.109:6640  tcp:10.30.171.171:6640  tcp:10.30.170.97:6640'.</msg>
<msg time="2026-10-06T01:20:59.495733" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:20:59.495900" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:20:59.495963" level="INFO">${stderr} = </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-10-06T01:20:59.472549" elapsed="0.023447"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:59.496254" elapsed="0.000316"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:59.497348" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:20:59.496924" elapsed="0.000479"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:20:59.497721" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:59.497529" elapsed="0.000262"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:59.497491" elapsed="0.000333"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:20:59.498009" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-10-06T01:20:59.497893" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:59.497873" elapsed="0.000247"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:20:59.498164" elapsed="0.000018"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:59.499254" elapsed="0.000454"/>
</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-10-06T01:20:59.499972" elapsed="0.000211"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:59.500436" elapsed="0.000128"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:20:59.498617" elapsed="0.002015"/>
</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-10-06T01:20:59.063367" elapsed="0.437388"/>
</kw>
<msg time="2026-10-06T01:20:59.500899" 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-10-06T01:20:59.061756" elapsed="0.439211"/>
</kw>
<arg>${tools_system}</arg>
<arg>sudo ovs-vsctl set-manager ${ovs_opt}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:20:59.060731" elapsed="0.440339"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify OVS Reports Connected" owner="OVSDB">
<kw name="Verify Ovs-vsctl Output" owner="OVSDB">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:59.509386" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:59.509024" elapsed="0.000437"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:59.508999" elapsed="0.000493"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:59.509945" 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-10-06T01:20:59.510072" 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-10-06T01:20:59.509774" elapsed="0.000331"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:59.510820" level="INFO">Attempting to execute command "sudo ovs-vsctl show" on remote system "10.30.170.234" 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-10-06T01:20:59.510386" elapsed="0.000495"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:20:59.511555" level="INFO">${conn_id} = 31</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-10-06T01:20:59.511125" elapsed="0.000463"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:20:59.512825" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:20:59.512922" 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-10-06T01:20:59.512452" elapsed="0.000500"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:59.513156" elapsed="0.000420"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:20:59.514989" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:20:59.914559" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:20:56 UTC 2026

  System load:  0.16               Processes:             110
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:20:59 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:20:59.514343" elapsed="0.400457"/>
</kw>
<msg time="2026-10-06T01:20:59.914884" 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-10-06T01:20:59.513822" elapsed="0.401142"/>
</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-10-06T01:20:59.511902" elapsed="0.403164"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:20:59.915559" level="INFO">Executing command 'sudo ovs-vsctl show'.</msg>
<msg time="2026-10-06T01:20:59.948697" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:20:59.948822" level="INFO">${stdout} = ef5e6311-6bc3-45eb-bec5-977d25c19a20
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    ovs_version: "2.17.11"</msg>
<msg time="2026-10-06T01:20:59.948876" level="INFO">${stderr} = </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-10-06T01:20:59.915349" elapsed="0.033555"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:59.949088" elapsed="0.000295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:59.949947" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:20:59.949638" elapsed="0.000348"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:20:59.950219" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:20:59.950071" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:59.950044" elapsed="0.000250"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:20:59.950426" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:20:59.950343" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-10-06T01:20:59.950329" elapsed="0.000239"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:20:59.950605" elapsed="0.000014"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:20:59.951367" elapsed="0.000292"/>
</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-10-06T01:20:59.951860" elapsed="0.000149"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:20:59.952149" elapsed="0.000106"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:20:59.950929" elapsed="0.001374"/>
</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-10-06T01:20:59.508418" elapsed="0.443956"/>
</kw>
<msg time="2026-10-06T01:20:59.952423" 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-10-06T01:20:59.507642" elapsed="0.444830"/>
</kw>
<msg time="2026-10-06T01:20:59.952576" level="INFO">${output} = ef5e6311-6bc3-45eb-bec5-977d25c19a20
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    ovs_version: "2.17.11"</msg>
<var>${output}</var>
<arg>${ovs_system}</arg>
<arg>sudo ovs-vsctl ${vsctl_args}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:20:59.506991" elapsed="0.445610"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:20:59.953034" level="INFO">ef5e6311-6bc3-45eb-bec5-977d25c19a20
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    ovs_version: "2.17.11"</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:20:59.952808" elapsed="0.000268"/>
</kw>
<if>
<branch type="IF" condition="&quot;${should_match}&quot; == &quot;True&quot;">
<kw name="Should Contain" owner="BuiltIn">
<msg time="2026-10-06T01:20:59.953908" level="FAIL">'ef5e6311-6bc3-45eb-bec5-977d25c19a20
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    ovs_version: "2.17.11"' does not contain 'is_connected'</msg>
<arg>${output}</arg>
<arg>${expected_output}</arg>
<doc>Fails if the `container` does not contain the `item` one or more times.</doc>
<status status="FAIL" start="2026-10-06T01:20:59.953364" elapsed="0.000629">'ef5e6311-6bc3-45eb-bec5-977d25c19a20
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    ovs_version: "2.17.11"' does not contain 'is_connected'</status>
</kw>
<status status="FAIL" start="2026-10-06T01:20:59.953142" elapsed="0.000923">'ef5e6311-6bc3-45eb-bec5-977d25c19a20
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    ovs_version: "2.17.11"' does not contain 'is_connected'</status>
</branch>
<status status="FAIL" start="2026-10-06T01:20:59.953125" elapsed="0.000972">'ef5e6311-6bc3-45eb-bec5-977d25c19a20
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    ovs_version: "2.17.11"' does not contain 'is_connected'</status>
</if>
<if>
<branch type="IF" condition="&quot;${should_match}&quot; == &quot;False&quot;">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${output}</arg>
<arg>${expected_output}</arg>
<doc>Fails if the `container` contains the `item`.</doc>
<status status="NOT RUN" start="2026-10-06T01:20:59.954334" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:20:59.954164" elapsed="0.000222"/>
</branch>
<status status="NOT RUN" start="2026-10-06T01:20:59.954147" elapsed="0.000262"/>
</if>
<return>
<value>${output}</value>
<status status="NOT RUN" start="2026-10-06T01:20:59.954439" elapsed="0.000015"/>
</return>
<var>${output}</var>
<arg>show</arg>
<arg>is_connected</arg>
<arg>${tools_system}</arg>
<doc>A wrapper keyword to make it easier to validate ovs-vsctl output, and gives an easy
way to check this output in a WUKS. The argument ${should_match} can control if the match should
exist (True} or not (False) or don't care (anything but True or False). ${should_match} is True by default</doc>
<status status="FAIL" start="2026-10-06T01:20:59.506396" elapsed="0.448146">'ef5e6311-6bc3-45eb-bec5-977d25c19a20
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    ovs_version: "2.17.11"' does not contain 'is_connected'</status>
</kw>
<return>
<value>${output}</value>
<status status="NOT RUN" start="2026-10-06T01:20:59.954599" elapsed="0.000014"/>
</return>
<arg>${tools_system}</arg>
<doc>Uses "vsctl show" to check for string "is_connected"</doc>
<status status="FAIL" start="2026-10-06T01:20:59.502021" elapsed="0.452684">'ef5e6311-6bc3-45eb-bec5-977d25c19a20
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    ovs_version: "2.17.11"' does not contain 'is_connected'</status>
</kw>
<kw name="Verify OVS Reports Connected" owner="OVSDB">
<kw name="Verify Ovs-vsctl Output" owner="OVSDB">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:00.967225" elapsed="0.000444"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:00.966601" elapsed="0.001193"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:00.966557" elapsed="0.001297"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:00.968623" 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-10-06T01:21:00.968878" 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-10-06T01:21:00.968310" elapsed="0.000624"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:00.970322" level="INFO">Attempting to execute command "sudo ovs-vsctl show" on remote system "10.30.170.234" 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-10-06T01:21:00.969543" elapsed="0.000881"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:00.971561" level="INFO">${conn_id} = 33</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-10-06T01:21:00.970864" elapsed="0.000753"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:21:00.973526" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:21:00.973712" 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-10-06T01:21:00.972934" elapsed="0.000831"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:00.974096" elapsed="0.000689"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:21:00.976988" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:21:01.351062" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:20:56 UTC 2026

  System load:  0.16               Processes:             110
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:20:59 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:21:00.976004" elapsed="0.375206"/>
</kw>
<msg time="2026-10-06T01:21:01.351284" 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-10-06T01:21:00.975147" elapsed="0.376215"/>
</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-10-06T01:21:00.972080" elapsed="0.379377"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:21:01.351931" level="INFO">Executing command 'sudo ovs-vsctl show'.</msg>
<msg time="2026-10-06T01:21:01.374816" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:21:01.374969" level="INFO">${stdout} = ef5e6311-6bc3-45eb-bec5-977d25c19a20
    Manager "tcp:10.30.171.171:6640"
        is_connected: true
    Manager "tcp:10.30.170.97:6640"
        is_connected: true
    Manager "tcp:10.30.171.109:6640"...</msg>
<msg time="2026-10-06T01:21:01.375026" level="INFO">${stderr} = </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-10-06T01:21:01.351726" elapsed="0.023329"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:01.375301" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:01.376335" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:01.375951" elapsed="0.000438"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:01.376653" elapsed="0.000042"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:01.376492" elapsed="0.000247"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:01.376460" elapsed="0.000311"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:21:01.376953" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:21:01.376839" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:01.376819" elapsed="0.000242"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:01.377103" elapsed="0.000018"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:01.378130" elapsed="0.000431"/>
</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-10-06T01:21:01.378849" elapsed="0.000200"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:01.379262" elapsed="0.000151"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:01.377540" elapsed="0.001950"/>
</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-10-06T01:21:00.965592" elapsed="0.414025"/>
</kw>
<msg time="2026-10-06T01:21:01.379740" 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-10-06T01:21:00.964318" elapsed="0.415569"/>
</kw>
<msg time="2026-10-06T01:21:01.380038" level="INFO">${output} = ef5e6311-6bc3-45eb-bec5-977d25c19a20
    Manager "tcp:10.30.171.171:6640"
        is_connected: true
    Manager "tcp:10.30.170.97:6640"
        is_connected: true
    Manager "tcp:10.30.171.109:6640"...</msg>
<var>${output}</var>
<arg>${ovs_system}</arg>
<arg>sudo ovs-vsctl ${vsctl_args}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:21:00.963236" elapsed="0.416837"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:01.380699" level="INFO">ef5e6311-6bc3-45eb-bec5-977d25c19a20
    Manager "tcp:10.30.171.171:6640"
        is_connected: true
    Manager "tcp:10.30.170.97:6640"
        is_connected: true
    Manager "tcp:10.30.171.109:6640"
        is_connected: true
    ovs_version: "2.17.11"</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:01.380364" elapsed="0.000396"/>
</kw>
<if>
<branch type="IF" condition="&quot;${should_match}&quot; == &quot;True&quot;">
<kw name="Should Contain" owner="BuiltIn">
<arg>${output}</arg>
<arg>${expected_output}</arg>
<doc>Fails if the `container` does not contain the `item` one or more times.</doc>
<status status="PASS" start="2026-10-06T01:21:01.381131" elapsed="0.000482"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:01.380845" elapsed="0.000828"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:01.380821" elapsed="0.000915"/>
</if>
<if>
<branch type="IF" condition="&quot;${should_match}&quot; == &quot;False&quot;">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${output}</arg>
<arg>${expected_output}</arg>
<doc>Fails if the `container` contains the `item`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:01.382183" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:01.381822" elapsed="0.000449"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:01.381797" elapsed="0.000512"/>
</if>
<return>
<value>${output}</value>
<status status="PASS" start="2026-10-06T01:21:01.382359" elapsed="0.000041"/>
</return>
<msg time="2026-10-06T01:21:01.382575" level="INFO">${output} = ef5e6311-6bc3-45eb-bec5-977d25c19a20
    Manager "tcp:10.30.171.171:6640"
        is_connected: true
    Manager "tcp:10.30.170.97:6640"
        is_connected: true
    Manager "tcp:10.30.171.109:6640"...</msg>
<var>${output}</var>
<arg>show</arg>
<arg>is_connected</arg>
<arg>${tools_system}</arg>
<doc>A wrapper keyword to make it easier to validate ovs-vsctl output, and gives an easy
way to check this output in a WUKS. The argument ${should_match} can control if the match should
exist (True} or not (False) or don't care (anything but True or False). ${should_match} is True by default</doc>
<status status="PASS" start="2026-10-06T01:21:00.962246" elapsed="0.420375"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-10-06T01:21:01.382731" elapsed="0.000046"/>
</return>
<arg>${tools_system}</arg>
<doc>Uses "vsctl show" to check for string "is_connected"</doc>
<status status="PASS" start="2026-10-06T01:21:00.955543" elapsed="0.427368"/>
</kw>
<msg time="2026-10-06T01:21:01.383047" level="INFO">${output} = ef5e6311-6bc3-45eb-bec5-977d25c19a20
    Manager "tcp:10.30.171.171:6640"
        is_connected: true
    Manager "tcp:10.30.170.97:6640"
        is_connected: true
    Manager "tcp:10.30.171.109:6640"...</msg>
<var>${output}</var>
<arg>5s</arg>
<arg>1s</arg>
<arg>Verify OVS Reports Connected</arg>
<arg>${tools_system}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:20:59.501338" elapsed="1.881754"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:01.383801" level="INFO">ef5e6311-6bc3-45eb-bec5-977d25c19a20
    Manager "tcp:10.30.171.171:6640"
        is_connected: true
    Manager "tcp:10.30.170.97:6640"
        is_connected: true
    Manager "tcp:10.30.171.109:6640"
        is_connected: true
    ovs_version: "2.17.11"</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:01.383425" elapsed="0.000449"/>
</kw>
<kw name="Get From List" owner="Collections">
<msg time="2026-10-06T01:21:01.384745" level="INFO">${controller_index} = 1</msg>
<var>${controller_index}</var>
<arg>${index_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="PASS" start="2026-10-06T01:21:01.384109" elapsed="0.000682"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:01.386091" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:21:01.385702" elapsed="0.000422"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:21:01.386202" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:21:01.386378" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${controller_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:21:01.385132" elapsed="0.001278"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:01.390521" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:01.390113" elapsed="0.000441"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:02.452569" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:02.454616" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Mon, 05-Oct-2026 01:21:02 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3443'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:21:02.455175" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:01.390792" elapsed="1.064445"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:02.459029" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:21:02.457722" elapsed="0.001743">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:21:02.457019" elapsed="0.002790">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:02.460320" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:02.459956" elapsed="0.000481"/>
</branch>
<status status="FAIL" start="2026-10-06T01:21:02.456970" elapsed="0.003518">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:02.461031" elapsed="0.000045"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:21:02.461232" elapsed="0.000043"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:21:02.455967" elapsed="0.005564">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:21:02.462074" elapsed="0.000050"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:02.462482" elapsed="0.000042"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:02.462891" elapsed="0.000043"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:02.463281" elapsed="0.000041"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:02.463757" elapsed="0.000044"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:02.464414" elapsed="0.000042"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:02.464830" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:02.465242" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:02.465622" elapsed="0.000039"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:02.466170" elapsed="0.000043"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:21:02.464096" elapsed="0.002193"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:21:02.463920" elapsed="0.002424"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:21:02.466426" elapsed="0.000031"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:21:01.389421" elapsed="1.077297">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:04.473525" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:04.472794" elapsed="0.000794"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:04.492318" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:04.492764" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3443'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:21:04.493090" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:04.473979" elapsed="0.019190"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:04.496547" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:21:04.495329" elapsed="0.001677">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:21:04.494711" elapsed="0.002569">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:04.497787" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:04.497419" elapsed="0.000486"/>
</branch>
<status status="FAIL" start="2026-10-06T01:21:04.494635" elapsed="0.003375">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:04.498600" elapsed="0.000044"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:21:04.498760" elapsed="0.000038"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:21:04.493777" elapsed="0.005259">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:21:04.499564" elapsed="0.000049"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:04.500040" elapsed="0.000044"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:04.500458" elapsed="0.000042"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:04.500851" elapsed="0.000042"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:04.501324" elapsed="0.000041"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:04.501965" elapsed="0.000043"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:04.502378" elapsed="0.000041"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:04.502795" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:04.503202" elapsed="0.000043"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:04.503700" elapsed="0.000045"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:21:04.501632" elapsed="0.002191"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:21:04.501470" elapsed="0.002409"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:21:04.503958" elapsed="0.000031"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:21:04.471633" elapsed="0.032616">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:06.510393" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:06.509642" elapsed="0.000815"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:06.524254" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:06.524658" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3443'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:21:06.525139" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:06.510842" elapsed="0.014356"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:06.528598" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:21:06.527390" elapsed="0.001620">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:21:06.526743" elapsed="0.002598">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:06.529851" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:06.529481" elapsed="0.000499"/>
</branch>
<status status="FAIL" start="2026-10-06T01:21:06.526667" elapsed="0.003388">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:06.530635" elapsed="0.000076"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:21:06.530851" elapsed="0.000038"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:21:06.525813" elapsed="0.005337">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:21:06.531659" elapsed="0.000086"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:06.532135" elapsed="0.000061"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:06.532559" elapsed="0.000045"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:06.533012" elapsed="0.000047"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:06.533504" elapsed="0.000042"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:06.534143" elapsed="0.000043"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:06.534530" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:06.534945" elapsed="0.000482"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:06.535863" elapsed="0.000049"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:06.536363" elapsed="0.000043"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:21:06.533834" elapsed="0.002650"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:21:06.533643" elapsed="0.002899"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:21:06.536622" elapsed="0.000032"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:21:06.508549" elapsed="0.028375">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:08.543259" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:08.542492" elapsed="0.000840"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:08.556120" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:08.556518" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3443'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:21:08.556848" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:08.543737" elapsed="0.013168"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:08.560400" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:21:08.559064" elapsed="0.001827">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:21:08.558441" elapsed="0.002866">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:08.561870" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:08.561468" elapsed="0.000520"/>
</branch>
<status status="FAIL" start="2026-10-06T01:21:08.558395" elapsed="0.003856">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:08.562821" elapsed="0.000048"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:21:08.562958" elapsed="0.000035"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:21:08.557499" elapsed="0.005767">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:21:08.563842" elapsed="0.000051"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:08.564312" elapsed="0.000044"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:08.564722" elapsed="0.000045"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:08.565114" elapsed="0.000042"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:08.565622" elapsed="0.000047"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:08.566273" elapsed="0.000054"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:08.566669" elapsed="0.000071"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:08.567106" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:08.567529" elapsed="0.000041"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:08.568008" elapsed="0.000042"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:21:08.565960" elapsed="0.002186"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:21:08.565803" elapsed="0.002398"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:21:08.568278" elapsed="0.000031"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:21:08.541377" elapsed="0.027155">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:10.575129" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:10.574366" elapsed="0.000829"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:10.589149" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:10.589535" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3443'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:21:10.589990" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:10.575555" elapsed="0.014515"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:10.593570" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:21:10.592355" elapsed="0.001648">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:21:10.591591" elapsed="0.002738">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:10.594837" elapsed="0.000482"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:10.594469" elapsed="0.000941"/>
</branch>
<status status="FAIL" start="2026-10-06T01:21:10.591546" elapsed="0.003926">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:10.596035" elapsed="0.000069"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:21:10.596242" elapsed="0.000039"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:21:10.590648" elapsed="0.005907">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:21:10.597198" elapsed="0.000053"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:10.597586" elapsed="0.000043"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:10.598071" elapsed="0.000063"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:10.598526" elapsed="0.000043"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:10.599133" elapsed="0.000046"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:10.599758" elapsed="0.000043"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:10.600169" elapsed="0.000055"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:10.600571" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:10.601025" elapsed="0.000063"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:10.601507" elapsed="0.000041"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:21:10.599437" elapsed="0.002187"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:21:10.599281" elapsed="0.002426"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:21:10.601791" elapsed="0.000032"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:21:10.573074" elapsed="0.028994">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:12.608309" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:12.607553" elapsed="0.000818"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:12.621790" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:12.622197" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3443'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:21:12.622498" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:12.608757" elapsed="0.013796"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:12.626279" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:21:12.624908" elapsed="0.001956">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:21:12.624224" elapsed="0.003013">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:12.627969" elapsed="0.000095"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:12.627441" elapsed="0.000743"/>
</branch>
<status status="FAIL" start="2026-10-06T01:21:12.624176" elapsed="0.004160">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:12.629259" elapsed="0.000082"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:21:12.629481" elapsed="0.000054"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:21:12.623241" elapsed="0.006707">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:21:12.630856" elapsed="0.000081"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:12.631587" elapsed="0.000078"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:12.632308" elapsed="0.000076"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:12.632976" elapsed="0.000102"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:12.633817" elapsed="0.000081"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:12.634861" elapsed="0.000079"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:12.635555" elapsed="0.000077"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:12.636276" elapsed="0.000077"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:12.636964" elapsed="0.000107"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:12.637804" elapsed="0.000075"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:21:12.634337" elapsed="0.003662"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:21:12.634090" elapsed="0.004026"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:21:12.638246" elapsed="0.000053"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:21:12.606469" elapsed="0.032188">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:14.648325" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:14.647574" elapsed="0.000815"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:14.661519" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:14.661946" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3443'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:21:14.662383" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:14.648775" elapsed="0.013665"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:14.665809" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:21:14.664577" elapsed="0.001583">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:21:14.663963" elapsed="0.002506">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:14.667005" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:14.666613" elapsed="0.000515"/>
</branch>
<status status="FAIL" start="2026-10-06T01:21:14.663918" elapsed="0.003262">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:14.667726" elapsed="0.000049"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:21:14.667911" elapsed="0.000037"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:21:14.663064" elapsed="0.005145">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:21:14.668754" elapsed="0.000052"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:14.669162" elapsed="0.000043"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:14.669539" elapsed="0.000041"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:14.669930" elapsed="0.000042"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:14.670401" elapsed="0.000043"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:14.671041" elapsed="0.000043"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:14.671425" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:14.671843" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:14.672251" elapsed="0.000041"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:14.672733" elapsed="0.000044"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:21:14.670728" elapsed="0.002125"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:21:14.670542" elapsed="0.002367"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:21:14.673006" elapsed="0.000033"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:21:14.646505" elapsed="0.026765">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:16.679549" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:16.678791" elapsed="0.000821"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:16.693396" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:16.693831" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3443'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:21:16.694162" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:16.680079" elapsed="0.014139"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:16.697622" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:21:16.696389" elapsed="0.001711">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:21:16.695765" elapsed="0.002589">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:16.698863" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:16.698493" elapsed="0.000511"/>
</branch>
<status status="FAIL" start="2026-10-06T01:21:16.695717" elapsed="0.003386">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:16.699609" elapsed="0.000045"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:21:16.699773" elapsed="0.000037"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:21:16.694826" elapsed="0.005240">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:21:16.700571" elapsed="0.000050"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:16.701058" elapsed="0.000046"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:16.701440" elapsed="0.000040"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:16.701829" elapsed="0.000042"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:16.702295" elapsed="0.000041"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:16.702916" elapsed="0.000065"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:16.703329" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:16.703743" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:16.704151" elapsed="0.000042"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:16.704610" elapsed="0.000041"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:21:16.702600" elapsed="0.002156"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:21:16.702439" elapsed="0.002374"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:21:16.704894" elapsed="0.000032"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:21:16.677629" elapsed="0.027550">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:18.712056" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:18.711274" elapsed="0.000849"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:18.725122" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:18.725505" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3443'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:21:18.725980" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:18.712483" elapsed="0.013556"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:18.729442" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:21:18.728221" elapsed="0.001590">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:21:18.727564" elapsed="0.002576">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:18.730621" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:18.730283" elapsed="0.000487"/>
</branch>
<status status="FAIL" start="2026-10-06T01:21:18.727513" elapsed="0.003310">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:18.731341" elapsed="0.000044"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:21:18.731527" elapsed="0.000037"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:21:18.726621" elapsed="0.005214">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:21:18.732371" elapsed="0.000052"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:18.732780" elapsed="0.000045"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:18.733183" elapsed="0.000042"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:18.733546" elapsed="0.000041"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:18.734048" elapsed="0.000044"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:18.734638" elapsed="0.000068"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:18.735075" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:18.735463" elapsed="0.000041"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:18.735872" elapsed="0.000042"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:18.736373" elapsed="0.000043"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:21:18.734351" elapsed="0.002140"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:21:18.734194" elapsed="0.002352"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:21:18.736624" elapsed="0.000031"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:21:18.710172" elapsed="0.026739">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:20.744758" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:20.743573" elapsed="0.001257"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:20.759512" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:20.760150" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3443'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:21:20.760475" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:20.745234" elapsed="0.015299"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:20.764600" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:21:20.763290" elapsed="0.001834">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:21:20.762606" elapsed="0.002910">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:20.766348" elapsed="0.000082"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:20.765781" elapsed="0.000769"/>
</branch>
<status status="FAIL" start="2026-10-06T01:21:20.762558" elapsed="0.004186">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:20.767602" elapsed="0.000117"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:21:20.767868" elapsed="0.000073"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:21:20.761418" elapsed="0.006785">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:21:20.768880" elapsed="0.000101"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:20.769571" elapsed="0.000073"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:20.770261" elapsed="0.000065"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:20.770721" elapsed="0.000046"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:20.771213" elapsed="0.000043"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:20.771846" elapsed="0.000044"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:20.772266" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:20.772655" elapsed="0.000090"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:20.773117" elapsed="0.000043"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:20.773812" elapsed="0.000076"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:21:20.771522" elapsed="0.002531"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:21:20.771361" elapsed="0.002788"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:21:20.774285" elapsed="0.000053"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:21:20.741862" elapsed="0.032892">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:22.781772" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:22.781042" elapsed="0.000796"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:22.795668" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:22.796197" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3443'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:21:22.796801" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:22.782231" elapsed="0.014663"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:22.800272" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:21:22.799047" elapsed="0.001570">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:21:22.798402" elapsed="0.002651">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:22.801541" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:22.801202" elapsed="0.000455"/>
</branch>
<status status="FAIL" start="2026-10-06T01:21:22.798356" elapsed="0.003384">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:22.802285" elapsed="0.000044"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:21:22.802462" elapsed="0.000038"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:21:22.797476" elapsed="0.005292">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:21:22.803301" elapsed="0.000050"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:22.803709" elapsed="0.000045"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:22.804116" elapsed="0.000042"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:22.804484" elapsed="0.000040"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:22.804980" elapsed="0.000046"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:22.805578" elapsed="0.000042"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:22.806015" elapsed="0.000044"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:22.806404" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:22.806815" elapsed="0.000042"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:22.807302" elapsed="0.000041"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:21:22.805288" elapsed="0.002130"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:21:22.805126" elapsed="0.002348"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:21:22.807555" elapsed="0.000037"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:21:22.779939" elapsed="0.027974">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:24.814177" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:24.813420" elapsed="0.000820"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:24.827467" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:24.827920" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3443'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:21:24.828215" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:24.814594" elapsed="0.013676"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:24.831635" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:21:24.830420" elapsed="0.001700">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:21:24.829791" elapsed="0.002579">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:24.832895" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:24.832508" elapsed="0.000505"/>
</branch>
<status status="FAIL" start="2026-10-06T01:21:24.829744" elapsed="0.003366">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:24.833625" elapsed="0.000044"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:21:24.833794" elapsed="0.000036"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:21:24.828898" elapsed="0.005188">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:21:24.834589" elapsed="0.000050"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:24.835075" elapsed="0.000045"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:24.835460" elapsed="0.000041"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:24.835875" elapsed="0.000043"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:24.836324" elapsed="0.000040"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:24.836967" elapsed="0.000043"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:24.837354" elapsed="0.000040"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:24.837766" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:24.838174" elapsed="0.000476"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:24.839136" elapsed="0.000045"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:21:24.836627" elapsed="0.002633"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:21:24.836468" elapsed="0.002851"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:21:24.839401" elapsed="0.000032"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:21:24.812322" elapsed="0.027340">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:26.845949" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:26.845193" elapsed="0.000822"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:26.858334" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:26.858765" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3443'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:21:26.859183" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:26.846372" elapsed="0.012866"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:26.862616" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:21:26.861390" elapsed="0.001612">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:21:26.860779" elapsed="0.002521">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:26.863826" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:26.863443" elapsed="0.000505"/>
</branch>
<status status="FAIL" start="2026-10-06T01:21:26.860731" elapsed="0.003267">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:26.864492" elapsed="0.000043"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:21:26.864670" elapsed="0.000083"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:21:26.859875" elapsed="0.005240">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:21:26.865746" elapsed="0.000081"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:26.866168" elapsed="0.000043"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:26.866543" elapsed="0.000041"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:26.866957" elapsed="0.000042"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:26.867418" elapsed="0.000043"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:26.868063" elapsed="0.000042"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:26.868447" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:26.868879" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:26.869264" elapsed="0.000040"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:26.869752" elapsed="0.000044"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:21:26.867754" elapsed="0.002136"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:21:26.867563" elapsed="0.002383"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:21:26.870025" elapsed="0.000032"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:21:26.844080" elapsed="0.026203">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:28.876573" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:28.875879" elapsed="0.000756"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:28.888503" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:28.888988" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3443'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:21:28.889291" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:28.877043" elapsed="0.012302"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:28.892746" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:21:28.891505" elapsed="0.001690">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:21:28.890911" elapsed="0.002538">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:28.893974" elapsed="0.000465"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:28.893588" elapsed="0.000928"/>
</branch>
<status status="FAIL" start="2026-10-06T01:21:28.890865" elapsed="0.003753">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:28.895180" elapsed="0.000046"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:21:28.895313" elapsed="0.000036"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:21:28.889990" elapsed="0.005595">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:21:28.896142" elapsed="0.000051"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:28.896578" elapsed="0.000044"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:28.897017" elapsed="0.000044"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:28.897384" elapsed="0.000040"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:28.898086" elapsed="0.000045"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:28.898714" elapsed="0.000045"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:28.899129" elapsed="0.000041"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:28.899515" elapsed="0.000041"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:28.899944" elapsed="0.000043"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:28.900408" elapsed="0.000040"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:21:28.898394" elapsed="0.002132"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:21:28.898236" elapsed="0.002347"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:21:28.900663" elapsed="0.000061"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:21:28.874634" elapsed="0.026337">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:30.907179" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:30.906434" elapsed="0.000809"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:30.918929" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:30.919320" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3443'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:21:30.919763" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:30.907591" elapsed="0.012232"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:30.923196" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:21:30.921997" elapsed="0.001537">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:21:30.921361" elapsed="0.002545">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:30.924382" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:30.924052" elapsed="0.000444"/>
</branch>
<status status="FAIL" start="2026-10-06T01:21:30.921315" elapsed="0.003230">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:30.925095" elapsed="0.000044"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:21:30.925270" elapsed="0.000038"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:21:30.920409" elapsed="0.005133">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:21:30.926102" elapsed="0.000050"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:30.926479" elapsed="0.000041"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:30.926898" elapsed="0.000042"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:30.927261" elapsed="0.000040"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:30.927728" elapsed="0.000061"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:30.928334" elapsed="0.000041"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:30.928738" elapsed="0.000061"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:30.929145" elapsed="0.000040"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:30.929521" elapsed="0.000052"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:30.930042" elapsed="0.000042"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:21:30.928051" elapsed="0.002110"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:21:30.927892" elapsed="0.002324"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:21:30.930293" elapsed="0.000031"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:21:30.905357" elapsed="0.025219">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:32.937185" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:32.936437" elapsed="0.000810"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:32.948935" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:32.949306" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3443'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:21:32.949619" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:32.937601" elapsed="0.012074"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:32.953118" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:21:32.951895" elapsed="0.001653">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:21:32.951256" elapsed="0.002596">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:32.954326" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:32.953992" elapsed="0.000449"/>
</branch>
<status status="FAIL" start="2026-10-06T01:21:32.951210" elapsed="0.003327">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:32.955104" elapsed="0.000045"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:21:32.955235" elapsed="0.000035"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:21:32.950328" elapsed="0.005172">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:21:32.956050" elapsed="0.000050"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:32.956478" elapsed="0.000043"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:32.956904" elapsed="0.000042"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:32.957267" elapsed="0.000040"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:32.957758" elapsed="0.000043"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:32.958342" elapsed="0.000040"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:32.958779" elapsed="0.000044"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:32.959172" elapsed="0.000041"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:32.959551" elapsed="0.000040"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:32.960070" elapsed="0.000043"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:21:32.958058" elapsed="0.002133"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:21:32.957903" elapsed="0.002344"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:21:32.960326" elapsed="0.000031"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:21:32.935350" elapsed="0.025230">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<msg time="2026-10-06T01:21:32.960941" level="FAIL">Keyword 'OVSDB.Get OVSDB UUID' failed after retrying for 30 seconds. The last error was: Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${ovsdb_uuid}</var>
<arg>30s</arg>
<arg>2s</arg>
<arg>OVSDB.Get OVSDB UUID</arg>
<arg>controller_http_session=${session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-10-06T01:21:01.386656" elapsed="31.574663">Keyword 'OVSDB.Get OVSDB UUID' failed after retrying for 30 seconds. The last error was: Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interfa...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<return>
<value>${ovsdb_uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:21:32.961517" elapsed="0.000033"/>
</return>
<var>${ovsdb_uuid}</var>
<doc>Connect OVS to the list of controllers in the ${controller_index_list} or all if no list is provided.</doc>
<status status="FAIL" start="2026-10-06T01:20:56.648661" elapsed="36.313156">Keyword 'OVSDB.Get OVSDB UUID' failed after retrying for 30 seconds. The last error was: Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interfa...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${ovsdb_uuid}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:32.962353" elapsed="0.000044"/>
</kw>
<doc>Connect OVS to all cluster instances.</doc>
<status status="FAIL" start="2026-10-06T01:20:56.118813" elapsed="36.844007">Keyword 'OVSDB.Get OVSDB UUID' failed after retrying for 30 seconds. The last error was: Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interfa...
    [ Message content over the limit has been removed. ]
...ue&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</test>
<test id="s1-s1-s1-t3" name="Check Entity Owner Status And Find Owner and Candidate Before Fail" line="26">
<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-10-06T01:21:32.966306" elapsed="0.000530"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:32.965739" elapsed="0.001213"/>
</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-10-06T01:21:32.969086" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:32.968855" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:32.968809" elapsed="0.000421"/>
</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-10-06T01:21:32.973966" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:32.973744" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:32.973656" elapsed="0.000451"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:32.976205" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:32.975406" elapsed="0.000857"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:32.977260" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:32.976595" elapsed="0.000719"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:32.977405" elapsed="0.000062"/>
</return>
<msg time="2026-10-06T01:21:32.977739" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:32.974564" elapsed="0.003231"/>
</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-10-06T01:21:32.983327" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:32.983138" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:32.983099" elapsed="0.000369"/>
</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-10-06T01:21:32.986050" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:32.985890" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:32.985847" elapsed="0.000290"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:32.986666" 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-10-06T01:21:32.986335" elapsed="0.000401"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:32.987261" 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-10-06T01:21:32.987016" elapsed="0.000279"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:33.036757" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:32.988148" elapsed="0.048799"/>
</kw>
<msg time="2026-10-06T01:21:33.037129" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:33.037171" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:32.987509" elapsed="0.049696"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:33.165706" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:33.037868" elapsed="0.128059"/>
</kw>
<msg time="2026-10-06T01:21:33.166101" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:33.166142" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:33.037385" elapsed="0.128792"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:33.166511" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:33.166265" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.166239" elapsed="0.000371"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:33.167227" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:33.166847" elapsed="0.000474"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:33.167583" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:33.167384" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.167367" elapsed="0.000330"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:33.167754" elapsed="0.000035"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:33.170513" elapsed="0.000698"/>
</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-10-06T01:21:33.172472" elapsed="0.000522"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:33.174207" elapsed="0.000316"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:33.168794" elapsed="0.005797"/>
</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-10-06T01:21:33.168133" elapsed="0.006786"/>
</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="PASS" start="2026-10-06T01:21:32.985222" elapsed="0.189778"/>
</kw>
<msg time="2026-10-06T01:21:33.175088" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:33.175129" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:32.983851" elapsed="0.191313"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:33.175323" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:21:33.175236" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.175217" elapsed="0.000187"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:33.175782" elapsed="0.000026"/>
</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-10-06T01:21:33.176090" elapsed="0.000074"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:33.176210" 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="PASS" start="2026-10-06T01:21:32.982440" elapsed="0.193860"/>
</kw>
<msg time="2026-10-06T01:21:33.176385" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:33.176426" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:32.978562" elapsed="0.197899"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:33.176903" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:33.176532" elapsed="0.000427"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.176515" elapsed="0.000467"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:32.978245" elapsed="0.198759"/>
</iter>
<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-10-06T01:21:33.179417" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:33.179326" elapsed="0.000134"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.179309" elapsed="0.000172"/>
</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-10-06T01:21:33.180586" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:33.180495" elapsed="0.000133"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.180474" elapsed="0.000175"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:33.181072" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:33.180837" elapsed="0.000261"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:33.181432" 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-10-06T01:21:33.181259" elapsed="0.000198"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:33.239972" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:33.182080" elapsed="0.058082"/>
</kw>
<msg time="2026-10-06T01:21:33.240331" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:33.240379" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:33.181609" elapsed="0.058817"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:33.348882" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:33.241110" elapsed="0.107977"/>
</kw>
<msg time="2026-10-06T01:21:33.349248" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:33.349289" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:33.240605" elapsed="0.108719"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:33.349616" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:33.349399" elapsed="0.000323"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.349379" elapsed="0.000370"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:33.350277" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:33.349931" elapsed="0.000436"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:33.350629" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:33.350429" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.350412" elapsed="0.000341"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:33.350788" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:33.353369" elapsed="0.000525"/>
</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-10-06T01:21:33.355134" elapsed="0.000465"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:33.357028" elapsed="0.000463"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:33.351644" elapsed="0.005916"/>
</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-10-06T01:21:33.351126" elapsed="0.006567"/>
</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="PASS" start="2026-10-06T01:21:33.180234" elapsed="0.177550"/>
</kw>
<msg time="2026-10-06T01:21:33.357866" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:33.357905" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:33.179630" elapsed="0.178311"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:33.358095" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:33.358011" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.357993" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:33.358488" elapsed="0.000023"/>
</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-10-06T01:21:33.358889" elapsed="0.000029"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:33.358961" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:33.179029" elapsed="0.180017"/>
</kw>
<msg time="2026-10-06T01:21:33.359129" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:33.359169" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:33.177259" elapsed="0.181944"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:33.359487" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:33.359270" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.359254" elapsed="0.000303"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:33.177120" elapsed="0.182458"/>
</iter>
<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-10-06T01:21:33.362017" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:33.361921" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.361904" elapsed="0.000176"/>
</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-10-06T01:21:33.363191" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:33.363103" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.363086" elapsed="0.000167"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:33.363618" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:33.363392" elapsed="0.000249"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:33.363999" 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-10-06T01:21:33.363829" elapsed="0.000194"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:33.437017" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:33.364585" elapsed="0.072609"/>
</kw>
<msg time="2026-10-06T01:21:33.437354" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:33.437395" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:33.364173" elapsed="0.073274"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:33.545602" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:33.438096" elapsed="0.107780"/>
</kw>
<msg time="2026-10-06T01:21:33.546038" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:33.546078" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:33.437618" elapsed="0.108495"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:33.546405" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:33.546188" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.546167" elapsed="0.000334"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:33.547057" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:33.546698" elapsed="0.000450"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:33.547406" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:33.547209" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.547193" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:33.547531" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:33.550070" elapsed="0.000479"/>
</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-10-06T01:21:33.551847" elapsed="0.000454"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:33.553758" elapsed="0.000457"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:33.548350" elapsed="0.005934"/>
</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-10-06T01:21:33.547846" elapsed="0.006555"/>
</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="PASS" start="2026-10-06T01:21:33.362839" elapsed="0.191638"/>
</kw>
<msg time="2026-10-06T01:21:33.554558" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:33.554597" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:33.362227" elapsed="0.192405"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:33.554845" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:33.554760" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.554742" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:33.555237" elapsed="0.000023"/>
</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-10-06T01:21:33.555535" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:33.555599" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:33.361594" elapsed="0.194141"/>
</kw>
<msg time="2026-10-06T01:21:33.555821" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:33.555864" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:33.359861" elapsed="0.196039"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:33.556192" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:33.555972" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.555955" elapsed="0.000308"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:33.359707" elapsed="0.196577"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:32.977903" elapsed="0.578409"/>
</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-10-06T01:21:32.973029" elapsed="0.583337"/>
</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-10-06T01:21:32.968215" elapsed="0.588238"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:32.967276" elapsed="0.589221"/>
</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-10-06T01:21:32.964926" elapsed="0.591622"/>
</kw>
<kw name="Get Ovsdb Entity Owner Status For One Device" owner="ClusterOvsdb">
<msg time="2026-10-06T01:21:33.560367" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<var>${original_owner}</var>
<var>${original_candidate_list}</var>
<arg>ovsdb://uuid/${ovsdb_uuid}</arg>
<arg>1</arg>
<doc>Check Entity Owner Status and identify owner and successors for an ovs device ${device}. Request is sent to controller ${controller_index}.</doc>
<status status="FAIL" start="2026-10-06T01:21:33.559158" elapsed="0.001244">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Get From List" owner="Collections">
<var>${original_candidate}</var>
<arg>${original_candidate_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:33.560574" elapsed="0.000020"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${original_owner}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:33.560800" elapsed="0.000020"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${original_candidate_list}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:33.560990" elapsed="0.000017"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${original_candidate}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:33.561173" elapsed="0.000017"/>
</kw>
<doc>Check Entity Owner Status and identify owner and candidate.</doc>
<status status="FAIL" start="2026-10-06T01:21:32.963579" elapsed="0.597756">Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s1-s1-t4" name="Create Bridge Manually and Verify Before Fail" line="36">
<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-10-06T01:21:33.563010" elapsed="0.000207"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:33.562752" elapsed="0.000515"/>
</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-10-06T01:21:33.564197" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:33.564106" elapsed="0.000133"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.564088" elapsed="0.000171"/>
</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-10-06T01:21:33.566142" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:33.566056" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.566039" elapsed="0.000165"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:33.567147" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:33.566799" elapsed="0.000374"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:33.567592" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:33.567323" elapsed="0.000292"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:33.567655" elapsed="0.000041"/>
</return>
<msg time="2026-10-06T01:21:33.567809" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:33.566405" elapsed="0.001427"/>
</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-10-06T01:21:33.570458" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:33.570298" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.570282" elapsed="0.000239"/>
</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-10-06T01:21:33.571610" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:33.571526" elapsed="0.000132"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.571510" elapsed="0.000192"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:33.572090" 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-10-06T01:21:33.571857" elapsed="0.000257"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:33.572440" 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-10-06T01:21:33.572272" elapsed="0.000192"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:33.627466" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:33.573057" elapsed="0.054595"/>
</kw>
<msg time="2026-10-06T01:21:33.627856" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:33.627900" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:33.572615" elapsed="0.055369"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:33.713693" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:33.628900" elapsed="0.085003"/>
</kw>
<msg time="2026-10-06T01:21:33.714074" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:33.714117" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:33.628171" elapsed="0.085982"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:33.714465" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:33.714235" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.714211" elapsed="0.000354"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:33.715151" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:33.714785" elapsed="0.000453"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:33.715503" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:33.715301" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.715284" elapsed="0.000314"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:33.715631" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:33.718233" elapsed="0.000526"/>
</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-10-06T01:21:33.719996" elapsed="0.000470"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:33.721661" elapsed="0.000556"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:33.716481" elapsed="0.005805"/>
</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-10-06T01:21:33.715957" elapsed="0.006447"/>
</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="PASS" start="2026-10-06T01:21:33.571270" elapsed="0.151212"/>
</kw>
<msg time="2026-10-06T01:21:33.722569" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:33.722609" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:33.570666" elapsed="0.151978"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:33.722834" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:21:33.722745" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.722726" elapsed="0.000188"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:33.723255" elapsed="0.000024"/>
</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-10-06T01:21:33.723565" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:33.723631" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:33.570013" elapsed="0.153815"/>
</kw>
<msg time="2026-10-06T01:21:33.723917" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:33.723957" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:33.568161" elapsed="0.155836"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:33.724291" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:33.724068" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.724052" elapsed="0.000349"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:33.568023" elapsed="0.156400"/>
</iter>
<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-10-06T01:21:33.727020" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:33.726932" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.726914" elapsed="0.000169"/>
</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-10-06T01:21:33.728197" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:33.728110" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.728093" elapsed="0.000168"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:33.728634" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:33.728403" elapsed="0.000256"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:33.729028" 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-10-06T01:21:33.728857" elapsed="0.000195"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:33.777102" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:33.729633" elapsed="0.047663"/>
</kw>
<msg time="2026-10-06T01:21:33.777459" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:33.777501" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:33.729204" elapsed="0.048332"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:33.869221" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:33.778168" elapsed="0.091239"/>
</kw>
<msg time="2026-10-06T01:21:33.869568" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:33.869609" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:33.777736" elapsed="0.091908"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:33.869963" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:33.869752" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.869732" elapsed="0.000330"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:33.870584" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:33.870242" elapsed="0.000426"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:33.870976" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:33.870760" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.870742" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:33.871102" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:33.873605" elapsed="0.000522"/>
</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-10-06T01:21:33.875384" elapsed="0.000504"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:33.877268" elapsed="0.000328"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:33.871928" elapsed="0.005734"/>
</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-10-06T01:21:33.871390" elapsed="0.006421"/>
</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="PASS" start="2026-10-06T01:21:33.727850" elapsed="0.150040"/>
</kw>
<msg time="2026-10-06T01:21:33.878017" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:33.878058" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:33.727232" elapsed="0.150862"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:33.878250" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:33.878164" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.878146" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:33.878645" elapsed="0.000024"/>
</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-10-06T01:21:33.879051" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:33.879118" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:33.726602" elapsed="0.152603"/>
</kw>
<msg time="2026-10-06T01:21:33.879290" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:33.879331" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:33.724698" elapsed="0.154668"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:33.879650" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:33.879434" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.879418" elapsed="0.000332"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:33.724541" elapsed="0.155231"/>
</iter>
<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-10-06T01:21:33.883759" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:33.883645" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.883627" elapsed="0.000201"/>
</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-10-06T01:21:33.884955" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:33.884869" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:33.884852" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:33.885391" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:33.885161" elapsed="0.000255"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:33.885778" 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-10-06T01:21:33.885580" elapsed="0.000222"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:33.938751" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:33.886367" elapsed="0.052567"/>
</kw>
<msg time="2026-10-06T01:21:33.939098" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:33.939139" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:33.885957" elapsed="0.053217"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:34.029474" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:33.939806" elapsed="0.090024"/>
</kw>
<msg time="2026-10-06T01:21:34.030071" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:34.030115" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:33.939344" elapsed="0.090808"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:34.030598" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:34.030273" elapsed="0.000419"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:34.030235" elapsed="0.000497"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:34.031459" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:34.031000" elapsed="0.000545"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:34.031853" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:34.031607" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:34.031590" elapsed="0.000358"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:34.031982" elapsed="0.000038"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:34.034649" elapsed="0.000529"/>
</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-10-06T01:21:34.036408" elapsed="0.000508"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:34.038134" elapsed="0.000313"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:34.032907" elapsed="0.005607"/>
</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-10-06T01:21:34.032332" elapsed="0.006303"/>
</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="PASS" start="2026-10-06T01:21:33.884575" elapsed="0.154389"/>
</kw>
<msg time="2026-10-06T01:21:34.039054" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:34.039095" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:33.883992" elapsed="0.155138"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:34.039289" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:34.039201" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:34.039183" elapsed="0.000185"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:34.039738" elapsed="0.000025"/>
</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-10-06T01:21:34.040053" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:34.040118" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:33.883344" elapsed="0.156862"/>
</kw>
<msg time="2026-10-06T01:21:34.040295" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:34.040336" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:33.880022" elapsed="0.160352"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:34.040665" elapsed="0.000096"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:34.040445" elapsed="0.000349"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:34.040429" elapsed="0.000388"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:33.879885" elapsed="0.160954"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:33.567883" elapsed="0.472989"/>
</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-10-06T01:21:33.565762" elapsed="0.475168"/>
</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-10-06T01:21:33.563828" elapsed="0.477155"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:33.563411" elapsed="0.477615"/>
</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-10-06T01:21:33.562365" elapsed="0.478714"/>
</kw>
<kw name="Create Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:34.072811" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:34.072521" elapsed="0.000480"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:34.072499" elapsed="0.000529"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:34.073375" 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-10-06T01:21:34.073478" 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-10-06T01:21:34.073224" elapsed="0.000278"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:34.074016" level="INFO">Attempting to execute command "sudo ovs-vsctl add-br br-s1" on remote system "10.30.170.234" 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-10-06T01:21:34.073721" elapsed="0.000338"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:34.074537" level="INFO">${conn_id} = 41</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-10-06T01:21:34.074235" elapsed="0.000326"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:21:34.075434" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:21:34.075505" 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-10-06T01:21:34.075136" elapsed="0.000400"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:34.075721" elapsed="0.000295"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:21:34.076809" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:21:34.511953" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:20:56 UTC 2026

  System load:  0.16               Processes:             110
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:21:01 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:21:34.076543" elapsed="0.435587"/>
</kw>
<msg time="2026-10-06T01:21:34.512231" 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-10-06T01:21:34.076180" elapsed="0.436149"/>
</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-10-06T01:21:34.074776" elapsed="0.437690"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:21:34.513151" level="INFO">Executing command 'sudo ovs-vsctl add-br br-s1'.</msg>
<msg time="2026-10-06T01:21:34.586729" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:21:34.587005" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:21:34.587093" level="INFO">${stderr} = </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-10-06T01:21:34.512853" elapsed="0.074287"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:34.587539" elapsed="0.000515"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:34.589283" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:34.588564" elapsed="0.000807"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:34.589834" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:34.589538" elapsed="0.000402"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:34.589486" elapsed="0.000502"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:21:34.590398" elapsed="0.000093"/>
</return>
<status status="PASS" start="2026-10-06T01:21:34.590110" elapsed="0.000483"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:34.590068" elapsed="0.000659"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:34.590817" elapsed="0.000032"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:34.592445" elapsed="0.000732"/>
</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-10-06T01:21:34.593606" elapsed="0.000395"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:34.594317" elapsed="0.000196"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:34.591487" elapsed="0.003135"/>
</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-10-06T01:21:34.072088" elapsed="0.522745"/>
</kw>
<msg time="2026-10-06T01:21:34.595044" 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-10-06T01:21:34.071484" elapsed="0.523667"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:21:34.071041" elapsed="0.524269"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:21:34.596475" level="INFO">${dictionary_operational} = {'br-s1': '5'}</msg>
<var>${dictionary_operational}</var>
<arg>br-s1=5</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:21:34.595791" elapsed="0.000739"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:21:34.597640" level="INFO">${dictionary_config} = {'br-s1': '0'}</msg>
<var>${dictionary_config}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:21:34.597009" elapsed="0.000732"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:34.608760" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:34.607964" elapsed="0.000856"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:34.609868" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:34.609192" elapsed="0.000732"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:34.610017" elapsed="0.000064"/>
</return>
<msg time="2026-10-06T01:21:34.610305" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:34.607108" elapsed="0.003248"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:34.616257" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:21:34.615611" elapsed="0.000702"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:21:34.616404" elapsed="0.000059"/>
</return>
<msg time="2026-10-06T01:21:34.616720" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:21:34.614898" elapsed="0.001879"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:34.619572" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:34.618971" elapsed="0.000698"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:34.621186" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:34.620159" elapsed="0.001128"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:34.643807" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:34.644098" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '144'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:21:34.644340" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:34.622006" elapsed="0.022388"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:34.621431" elapsed="0.023049"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:34.644936" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:34.644534" elapsed="0.000537"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:34.621391" elapsed="0.023726"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:34.648028" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:34.647245" elapsed="0.000886"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:34.646658" elapsed="0.001546"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:34.646620" elapsed="0.001634"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:34.649639" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:34.649033" elapsed="0.000754"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:34.648451" elapsed="0.001409"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:34.648413" elapsed="0.001498"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:34.667527" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:34.650299" elapsed="0.017289"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:34.668379" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:34.667910" elapsed="0.000589"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:34.669562" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:34.668953" elapsed="0.000663"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:34.668549" elapsed="0.001207"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:34.667867" elapsed="0.001930"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:34.670552" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:34.670056" elapsed="0.000531"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:34.671045" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:34.670713" elapsed="0.000407"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:34.671767" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:34.671369" elapsed="0.000433"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:34.671152" elapsed="0.000697"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:34.670654" elapsed="0.001223"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:34.672074" elapsed="0.000433"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:21:34.673283" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:34.672762" elapsed="0.000555"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:21:34.673530" elapsed="0.000343"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:21:34.645901" elapsed="0.028051"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:21:34.674156" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-10-06T01:21:34.674040" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:34.674017" elapsed="0.000251"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:34.674464" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:21:34.674552" elapsed="0.000019"/>
</return>
<msg time="2026-10-06T01:21:34.674893" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:21:34.617447" elapsed="0.057484"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:21:34.674995" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:21:34.675164" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:21:34.613927" elapsed="0.061272"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:34.676772" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:34.676285" elapsed="0.000582"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:21:34.676058" elapsed="0.000859"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:21:34.675833" elapsed="0.001125"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:21:34.675483" elapsed="0.001544"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:34.610776" elapsed="0.066294"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:34.680642" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:34.680217" elapsed="0.000490"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:21:34.680770" elapsed="0.000039"/>
</return>
<msg time="2026-10-06T01:21:34.680943" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:21:34.679766" elapsed="0.001210"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:34.682582" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:34.682275" elapsed="0.000364"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:34.683241" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:34.682938" elapsed="0.000360"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:35.899945" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:35.900265" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node0196abtsaqd8g4mpvcap0t4mk0.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Mon, 05-Oct-2026 01:21:35 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:21:35.900516" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:34.683726" elapsed="1.216848"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:34.683383" elapsed="1.217404"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:35.901311" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:35.900863" elapsed="0.000590"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:34.683359" elapsed="1.218140"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:35.904607" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:35.903818" elapsed="0.000934"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:35.903221" elapsed="0.001606"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:35.903179" elapsed="0.001699"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:35.906189" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:35.905526" elapsed="0.000757"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:35.904994" elapsed="0.001360"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:35.904959" elapsed="0.001446"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:35.907649" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:35.906844" elapsed="0.000907"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:35.908355" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:35.907899" elapsed="0.000576"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:35.909568" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:35.908921" elapsed="0.000703"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:35.908525" elapsed="0.001222"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:35.907861" elapsed="0.001933"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:35.910981" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:35.910171" elapsed="0.000866"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:35.911631" elapsed="0.000084"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:35.911181" elapsed="0.000614"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:35.912838" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:35.912195" elapsed="0.000697"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:35.911846" elapsed="0.001120"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:35.911144" elapsed="0.001867"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:35.913359" elapsed="0.000717"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:21:35.915114" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:35.914429" elapsed="0.000740"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:21:35.915609" elapsed="0.000534"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:21:35.902320" elapsed="0.013952"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:21:35.916596" elapsed="0.000066"/>
</return>
<status status="PASS" start="2026-10-06T01:21:35.916412" elapsed="0.000370"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:35.916375" elapsed="0.000458"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:35.917168" elapsed="0.000057"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:21:35.917328" elapsed="0.000032"/>
</return>
<msg time="2026-10-06T01:21:35.917863" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:21:34.681389" elapsed="1.236535"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:21:35.918028" elapsed="0.000057"/>
</return>
<msg time="2026-10-06T01:21:35.918301" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:21:34.679159" elapsed="1.239192"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:35.920993" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:35.919985" elapsed="0.001192"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:21:35.919592" elapsed="0.001673"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:21:35.919357" elapsed="0.001972"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:21:35.918854" elapsed="0.002582"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:34.677183" elapsed="1.244322"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:35.927563" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:35.926890" elapsed="0.000730"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:21:35.927774" elapsed="0.000064"/>
</return>
<msg time="2026-10-06T01:21:35.928086" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:21:35.926060" elapsed="0.002077"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:35.931189" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:35.930271" elapsed="0.001015"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:35.932249" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:35.931754" elapsed="0.000584"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:37.109284" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:37.109613" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node0gusd5pkzmwglcb3p20r9r8j10.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Mon, 05-Oct-2026 01:21:36 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:21:37.109930" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:35.933028" elapsed="1.176964"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:35.932475" elapsed="1.177627"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.110575" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:37.110165" elapsed="0.000610"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:35.932437" elapsed="1.178388"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.113950" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:37.113097" elapsed="0.000954"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:37.112485" elapsed="0.001641"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.112445" elapsed="0.001831"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.115625" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:37.114997" elapsed="0.000775"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:37.114407" elapsed="0.001440"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.114370" elapsed="0.001532"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.117172" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:37.116306" elapsed="0.000926"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.117899" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:37.117383" elapsed="0.000641"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.119103" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:37.118430" elapsed="0.000731"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:37.118074" elapsed="0.001164"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.117344" elapsed="0.001940"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.120795" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:37.119718" elapsed="0.001141"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.121526" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:37.121025" elapsed="0.000621"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.122927" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:37.122123" elapsed="0.000862"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:37.121749" elapsed="0.001311"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.120973" elapsed="0.002131"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:37.123423" elapsed="0.000724"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:21:37.125187" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:37.124548" elapsed="0.000700"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:21:37.125587" elapsed="0.000574"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:21:37.111607" elapsed="0.014685"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:21:37.126647" elapsed="0.000147"/>
</return>
<status status="PASS" start="2026-10-06T01:21:37.126433" elapsed="0.000442"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.126396" elapsed="0.000549"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.127293" elapsed="0.000047"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:21:37.127439" elapsed="0.000032"/>
</return>
<msg time="2026-10-06T01:21:37.127996" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:21:35.928842" elapsed="1.199211"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:21:37.128159" elapsed="0.000058"/>
</return>
<msg time="2026-10-06T01:21:37.128436" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:21:35.924961" elapsed="1.203528"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.131002" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:37.130247" elapsed="0.000903"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:21:37.129875" elapsed="0.001356"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:21:37.129570" elapsed="0.001723"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:21:37.129028" elapsed="0.002370"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:35.921739" elapsed="1.209728"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:34.610472" elapsed="2.521053"/>
</for>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:21:34.605883" elapsed="2.525746"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:21:34.598176" elapsed="2.533691"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.142490" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:37.141744" elapsed="0.000805"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.143565" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:37.142946" elapsed="0.000674"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:37.143763" elapsed="0.000062"/>
</return>
<msg time="2026-10-06T01:21:37.144053" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:37.140861" elapsed="0.003243"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.150458" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:21:37.149727" elapsed="0.000788"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:21:37.150608" elapsed="0.000183"/>
</return>
<msg time="2026-10-06T01:21:37.151021" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:21:37.148964" elapsed="0.002110"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.153934" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:37.153379" elapsed="0.000745"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.155169" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:37.154553" elapsed="0.000706"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:37.171287" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:37.171636" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '5505'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;4751e290-1144-4989-835c-4a6087613b63&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8361c3c3-061f-4f86-bc75-fbc902a226f8&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0efe4d72-9818-4679-b069-7c8c272a9d6e&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;92:e2:51:47:89:49&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;4&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:92:e2:51:47:89:49&lt;/datapath-id&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:21:37.172092" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:37.156138" elapsed="0.016009"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:37.155553" elapsed="0.016681"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.172625" elapsed="0.000100"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:37.172287" elapsed="0.000528"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.155502" elapsed="0.017364"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.175851" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;4751e290-1144-4989-835c-4a6087613b63&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8361c3c3-061f-4f86-bc75-fbc902a226f8&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0efe4d72-9818-4679-b069-7c8c272a9d6e&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;92:e2:51:47:89:49&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;4&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:92:e2:51:47:89:49&lt;/datapath-id&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:37.174958" elapsed="0.001122"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:37.174386" elapsed="0.001767"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.174346" elapsed="0.001857"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.177498" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:37.176898" elapsed="0.000690"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:37.176317" elapsed="0.001457"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.176283" elapsed="0.001547"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.179036" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:37.178213" elapsed="0.000879"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.179777" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:37.179237" elapsed="0.000674"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.181436" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:37.180352" elapsed="0.001149"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:37.179962" elapsed="0.001618"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.179200" elapsed="0.002427"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.182904" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:37.182070" elapsed="0.000890"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.183556" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:37.183104" elapsed="0.000617"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.184767" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:37.184121" elapsed="0.000705"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:37.183775" elapsed="0.001123"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.183066" elapsed="0.001877"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:37.185293" elapsed="0.000716"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:21:37.186907" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:37.186357" elapsed="0.000604"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:21:37.187294" elapsed="0.000525"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:21:37.173573" elapsed="0.014370"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:21:37.188264" elapsed="0.000054"/>
</return>
<status status="PASS" start="2026-10-06T01:21:37.188082" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.188045" elapsed="0.000392"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.188800" elapsed="0.000047"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:21:37.188944" elapsed="0.000033"/>
</return>
<msg time="2026-10-06T01:21:37.189570" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1&lt;/node-id...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:21:37.151977" elapsed="0.037654"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:21:37.189785" elapsed="0.000058"/>
</return>
<msg time="2026-10-06T01:21:37.190060" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1&lt;/node-id...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:21:37.147847" elapsed="0.042270"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.191951" level="INFO">Item found from container 5 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:37.191486" elapsed="0.000583"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:21:37.191266" elapsed="0.000853"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:21:37.191123" elapsed="0.001033"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:21:37.190564" elapsed="0.001656"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:37.144579" elapsed="0.047683"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.195823" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:37.195419" elapsed="0.000439"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:21:37.195961" elapsed="0.000039"/>
</return>
<msg time="2026-10-06T01:21:37.196136" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:21:37.194976" elapsed="0.001192"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.197801" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:37.197459" elapsed="0.000400"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.198422" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:37.198119" elapsed="0.000359"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:37.239263" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0196abtsaqd8g4mpvcap0t4mk0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:37.239456" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2497'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"4751e290-1144-4989-835c-4a6087613b63","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"8361c3c3-061f-4f86-bc75-fbc902a226f8","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"0efe4d72-9818-4679-b069-7c8c272a9d6e","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"92:e2:51:47:89:49","ovsdb:ofport":65534,"ovsdb:ifindex":4}],"ovsdb:datapath-id":"00:00:92:e2:51:47:89:49"},{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']"}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:21:37.239601" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:37.198923" elapsed="0.040712"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:37.198563" elapsed="0.041170"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.239986" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:37.239769" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.198539" elapsed="0.041589"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.242134" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"4751e290-1144-4989-835c-4a6087613b63","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"8361c3c3-061f-4f86-bc75-fbc902a226f8","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"0efe4d72-9818-4679-b069-7c8c272a9d6e","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"92:e2:51:47:89:49","ovsdb:ofport":65534,"ovsdb:ifindex":4}],"ovsdb:datapath-id":"00:00:92:e2:51:47:89:49"},{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']"}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:37.241589" elapsed="0.000667"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:37.241253" elapsed="0.001049"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.241228" elapsed="0.001106"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.243344" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:37.242770" elapsed="0.000632"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:37.242406" elapsed="0.001041"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.242385" elapsed="0.001095"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.244242" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:37.243755" elapsed="0.000522"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.244711" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:37.244388" elapsed="0.000400"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.245439" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:37.245044" elapsed="0.000429"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:37.244824" elapsed="0.000696"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.244363" elapsed="0.001186"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.246295" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:37.245821" elapsed="0.000509"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.246733" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:37.246419" elapsed="0.000388"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.247417" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:37.247054" elapsed="0.000397"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:37.246838" elapsed="0.000658"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.246396" elapsed="0.001128"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:37.247752" elapsed="0.000404"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:21:37.248708" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:37.248372" elapsed="0.000371"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:21:37.248949" elapsed="0.000290"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:21:37.240744" elapsed="0.008572"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:21:37.249512" elapsed="0.000211"/>
</return>
<status status="PASS" start="2026-10-06T01:21:37.249401" elapsed="0.000377"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.249378" elapsed="0.000432"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.250004" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:21:37.250090" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:21:37.250436" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:21:37.196580" elapsed="0.053892"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:21:37.250535" elapsed="0.000034"/>
</return>
<msg time="2026-10-06T01:21:37.250741" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:21:37.194372" elapsed="0.056404"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.252189" level="INFO">Item found from container 5 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:37.251758" elapsed="0.000533"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:21:37.251508" elapsed="0.000833"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:21:37.251365" elapsed="0.001013"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:21:37.251056" elapsed="0.001388"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:37.192372" elapsed="0.060160"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.256099" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:37.255722" elapsed="0.000411"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:21:37.256191" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:21:37.256359" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:21:37.255254" elapsed="0.001137"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.258026" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:37.257716" elapsed="0.000368"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.258643" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:37.258342" elapsed="0.000393"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:37.297423" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0gusd5pkzmwglcb3p20r9r8j10.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:37.297611" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2497'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"4751e290-1144-4989-835c-4a6087613b63","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"8361c3c3-061f-4f86-bc75-fbc902a226f8","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"0efe4d72-9818-4679-b069-7c8c272a9d6e","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"92:e2:51:47:89:49","ovsdb:ofport":65534,"ovsdb:ifindex":4}],"ovsdb:datapath-id":"00:00:92:e2:51:47:89:49"},{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']"}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:21:37.297800" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:37.259134" elapsed="0.038705"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:37.258821" elapsed="0.039072"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.298135" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:37.297926" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.258797" elapsed="0.039446"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.300357" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"4751e290-1144-4989-835c-4a6087613b63","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"8361c3c3-061f-4f86-bc75-fbc902a226f8","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"0efe4d72-9818-4679-b069-7c8c272a9d6e","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"92:e2:51:47:89:49","ovsdb:ofport":65534,"ovsdb:ifindex":4}],"ovsdb:datapath-id":"00:00:92:e2:51:47:89:49"},{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']"}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:37.299529" elapsed="0.000956"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:37.299194" elapsed="0.001338"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.299168" elapsed="0.001395"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.301417" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:37.301014" elapsed="0.000461"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:37.300636" elapsed="0.000882"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.300614" elapsed="0.000935"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.302300" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:37.301819" elapsed="0.000516"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.302742" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:37.302425" elapsed="0.000392"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.303433" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:37.303064" elapsed="0.000402"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:37.302848" elapsed="0.000664"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.302402" elapsed="0.001138"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.304291" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:37.303819" elapsed="0.000507"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.304729" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:37.304414" elapsed="0.000398"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.305589" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:37.305094" elapsed="0.000543"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:37.304844" elapsed="0.000895"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.304392" elapsed="0.001397"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:37.306059" elapsed="0.000501"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:21:37.307141" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:37.306824" elapsed="0.000352"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:21:37.307383" elapsed="0.000330"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:21:37.298717" elapsed="0.009077"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:21:37.307996" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-10-06T01:21:37.307881" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.307858" elapsed="0.000249"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.308300" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:21:37.308387" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:21:37.308772" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:21:37.256834" elapsed="0.051975"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:21:37.308873" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:21:37.309043" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:21:37.254669" elapsed="0.054407"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.310531" level="INFO">Item found from container 5 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:37.310101" elapsed="0.000534"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:21:37.309880" elapsed="0.000841"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:21:37.309732" elapsed="0.001028"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:21:37.309382" elapsed="0.001445"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:37.252646" elapsed="0.058275"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:37.144334" elapsed="0.166624"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:21:37.139616" elapsed="0.171408"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:21:37.132343" elapsed="0.178749"/>
</kw>
<doc>Create bridge br-s1 using OVS command and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:21:34.070476" elapsed="3.240699"/>
</kw>
<doc>Create bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="PASS" start="2026-10-06T01:21:33.561694" elapsed="3.749637"/>
</test>
<test id="s1-s1-s1-t5" name="Add Port Manually and Verify Before Fail" line="40">
<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-10-06T01:21:37.313602" elapsed="0.000346"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:37.313183" elapsed="0.000839"/>
</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-10-06T01:21:37.315396" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:37.315274" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.315249" 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-10-06T01:21:37.318396" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:37.318279" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.318255" elapsed="0.000230"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.319793" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:37.319298" elapsed="0.000531"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.320416" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:37.320038" elapsed="0.000412"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:37.320505" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:21:37.320719" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:37.318802" elapsed="0.001952"/>
</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-10-06T01:21:37.324157" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:37.324039" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.324015" elapsed="0.000230"/>
</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-10-06T01:21:37.326125" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:37.326006" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.325982" elapsed="0.000232"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:37.326770" 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-10-06T01:21:37.326417" elapsed="0.000389"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:37.327272" 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-10-06T01:21:37.327033" elapsed="0.000273"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:37.370550" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:37.328153" elapsed="0.042616"/>
</kw>
<msg time="2026-10-06T01:21:37.370947" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:37.370989" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:37.327520" elapsed="0.043505"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:37.455367" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:37.371616" elapsed="0.083959"/>
</kw>
<msg time="2026-10-06T01:21:37.455847" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:37.455890" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:37.371190" elapsed="0.084735"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.456256" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:37.456015" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.455990" elapsed="0.000366"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.456932" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:37.456536" elapsed="0.000479"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.457273" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:37.457076" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.457059" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:37.457399" elapsed="0.000034"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:37.460013" elapsed="0.000479"/>
</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-10-06T01:21:37.461759" elapsed="0.002103"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:37.465064" elapsed="0.000321"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:37.458259" elapsed="0.007194"/>
</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-10-06T01:21:37.457743" elapsed="0.007831"/>
</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="PASS" start="2026-10-06T01:21:37.325539" elapsed="0.140127"/>
</kw>
<msg time="2026-10-06T01:21:37.465767" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:37.465808" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:37.324499" elapsed="0.141345"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:37.466004" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:21:37.465916" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.465899" elapsed="0.000185"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:37.466414" elapsed="0.000024"/>
</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-10-06T01:21:37.466752" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:37.466817" 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="PASS" start="2026-10-06T01:21:37.323597" elapsed="0.143307"/>
</kw>
<msg time="2026-10-06T01:21:37.466988" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:37.467028" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:37.321233" elapsed="0.145831"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.467349" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:37.467133" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.467117" elapsed="0.000305"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:37.321013" elapsed="0.146431"/>
</iter>
<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-10-06T01:21:37.469936" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:37.469851" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.469833" elapsed="0.000165"/>
</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-10-06T01:21:37.471132" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:37.471048" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.471031" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:37.471571" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:37.471338" elapsed="0.000258"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:37.471961" 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-10-06T01:21:37.471783" elapsed="0.000203"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:37.522716" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:37.472549" elapsed="0.050446"/>
</kw>
<msg time="2026-10-06T01:21:37.523246" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:37.523291" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:37.472141" elapsed="0.051186"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:37.622165" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:37.524183" elapsed="0.098178"/>
</kw>
<msg time="2026-10-06T01:21:37.622521" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:37.622562" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:37.523587" elapsed="0.099011"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.622975" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:37.622730" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.622699" elapsed="0.000379"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.623614" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:37.623266" elapsed="0.000467"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.623995" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:37.623796" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.623780" elapsed="0.000309"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:37.624124" elapsed="0.000040"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:37.626855" elapsed="0.000488"/>
</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-10-06T01:21:37.628587" elapsed="0.000525"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:37.630303" elapsed="0.000600"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:37.625034" elapsed="0.005939"/>
</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-10-06T01:21:37.624461" elapsed="0.006634"/>
</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="PASS" start="2026-10-06T01:21:37.470753" elapsed="0.160421"/>
</kw>
<msg time="2026-10-06T01:21:37.631260" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:37.631300" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:37.470146" elapsed="0.161189"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:37.631494" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:37.631407" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.631390" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.632223" elapsed="0.000025"/>
</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-10-06T01:21:37.632597" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:37.632694" 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="PASS" start="2026-10-06T01:21:37.469466" elapsed="0.163319"/>
</kw>
<msg time="2026-10-06T01:21:37.632872" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:37.632913" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:37.467753" elapsed="0.165195"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.633241" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:37.633019" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.633003" elapsed="0.000310"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:37.467558" elapsed="0.165777"/>
</iter>
<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-10-06T01:21:37.635910" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:37.635824" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.635807" elapsed="0.000165"/>
</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-10-06T01:21:37.637073" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:37.636990" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.636973" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:37.637513" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:37.637279" elapsed="0.000258"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:37.638007" 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-10-06T01:21:37.637828" elapsed="0.000203"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:37.690276" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:37.638598" elapsed="0.051853"/>
</kw>
<msg time="2026-10-06T01:21:37.690606" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:37.690660" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:37.638186" elapsed="0.052528"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:37.787281" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:37.691301" elapsed="0.096159"/>
</kw>
<msg time="2026-10-06T01:21:37.787615" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:37.787668" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:37.690879" elapsed="0.096846"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.787999" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:37.787797" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.787779" elapsed="0.000314"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.788607" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:37.788275" elapsed="0.000446"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.788983" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:37.788783" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.788766" elapsed="0.000309"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:37.789105" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:37.791591" elapsed="0.000510"/>
</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-10-06T01:21:37.793317" elapsed="0.000488"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:37.795217" elapsed="0.000520"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:37.789936" elapsed="0.005870"/>
</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-10-06T01:21:37.789404" elapsed="0.006520"/>
</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="PASS" start="2026-10-06T01:21:37.636732" elapsed="0.159270"/>
</kw>
<msg time="2026-10-06T01:21:37.796085" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:37.796124" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:37.636119" elapsed="0.160040"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:37.796314" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:37.796229" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.796211" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.796806" elapsed="0.000025"/>
</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-10-06T01:21:37.797106" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:37.797171" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:37.635487" elapsed="0.161769"/>
</kw>
<msg time="2026-10-06T01:21:37.797338" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:37.797378" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:37.633599" elapsed="0.163814"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.797724" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:37.797480" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.797464" elapsed="0.000333"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:37.633460" elapsed="0.164358"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:37.320820" elapsed="0.477025"/>
</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-10-06T01:21:37.317862" elapsed="0.480038"/>
</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-10-06T01:21:37.314915" elapsed="0.483042"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:37.314230" elapsed="0.483772"/>
</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-10-06T01:21:37.312610" elapsed="0.485445"/>
</kw>
<kw name="Add Sample Port To The Manual Bridge And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:37.801557" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:37.801322" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:37.801305" elapsed="0.000324"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:37.802128" 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-10-06T01:21:37.802221" 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-10-06T01:21:37.801994" elapsed="0.000251"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.802752" level="INFO">Attempting to execute command "sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan" on remote system "10.30.170.234" 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-10-06T01:21:37.802434" elapsed="0.000396"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:37.803314" level="INFO">${conn_id} = 46</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-10-06T01:21:37.803007" elapsed="0.000331"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:21:37.804188" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:21:37.804257" 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-10-06T01:21:37.803920" elapsed="0.000359"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:37.804426" elapsed="0.000309"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:21:37.805487" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:21:38.230820" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:20:56 UTC 2026

  System load:  0.16               Processes:             110
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:21:34 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:21:37.805257" elapsed="0.425654"/>
</kw>
<msg time="2026-10-06T01:21:38.230972" 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-10-06T01:21:37.804896" elapsed="0.426139"/>
</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-10-06T01:21:37.803532" elapsed="0.427591"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:21:38.231540" level="INFO">Executing command 'sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan'.</msg>
<msg time="2026-10-06T01:21:38.274788" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:21:38.275006" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:21:38.275095" level="INFO">${stderr} = ovs-vsctl: Error detected while setting up 'vx1': vx1: vxlan type requires valid 'remote_ip' argument.  See ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/var/log/openvswitch"...</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-10-06T01:21:38.231379" elapsed="0.043766"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:38.275488" elapsed="0.000480"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.277024" level="INFO">ovs-vsctl: Error detected while setting up 'vx1': vx1: vxlan type requires valid 'remote_ip' argument.  See ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/var/log/openvswitch".</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.276433" elapsed="0.000687"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:38.277469" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:38.277263" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.277221" elapsed="0.000392"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:21:38.277975" elapsed="0.000053"/>
</return>
<status status="PASS" start="2026-10-06T01:21:38.277787" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.277753" elapsed="0.000392"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:38.278211" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:38.279798" elapsed="0.000617"/>
</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-10-06T01:21:38.280873" elapsed="0.000305"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:38.281490" elapsed="0.000245"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:38.278881" elapsed="0.002960"/>
</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-10-06T01:21:37.800905" elapsed="0.481090"/>
</kw>
<msg time="2026-10-06T01:21:38.282098" 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-10-06T01:21:37.800362" elapsed="0.481835"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:21:37.799939" elapsed="0.482493"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.283632" level="INFO">${dictionary_operational} = {'vx1': '2'}</msg>
<var>${dictionary_operational}</var>
<arg>vx1=2</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:21:38.282964" elapsed="0.000771"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.284899" level="INFO">${dictionary_config} = {'vx1': '0'}</msg>
<var>${dictionary_config}</var>
<arg>vx1=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:21:38.284222" elapsed="0.000731"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.294909" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:38.294126" elapsed="0.000840"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.295966" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:38.295301" elapsed="0.000718"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:38.296109" elapsed="0.000060"/>
</return>
<msg time="2026-10-06T01:21:38.296391" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:38.293285" elapsed="0.003157"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.300759" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:21:38.300347" elapsed="0.000446"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:21:38.300852" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:21:38.301024" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:21:38.299905" elapsed="0.001151"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.302716" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.302370" elapsed="0.000406"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.303338" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.303035" elapsed="0.000359"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:38.312029" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:38.312221" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '144'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:21:38.312371" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:38.304068" elapsed="0.008337"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.303743" elapsed="0.008715"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.312746" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.312495" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.303454" elapsed="0.009407"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.314708" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.314199" elapsed="0.000575"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.313866" elapsed="0.000952"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.313841" elapsed="0.001010"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.315625" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.315250" elapsed="0.000469"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.314922" elapsed="0.000842"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.314901" elapsed="0.000895"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.316532" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:38.316035" elapsed="0.000532"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.317035" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.316740" elapsed="0.000369"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.317772" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:38.317363" elapsed="0.000444"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.317141" elapsed="0.000712"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.316714" elapsed="0.001168"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.318610" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:38.318117" elapsed="0.000548"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.319062" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.318778" elapsed="0.000357"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.319782" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:38.319380" elapsed="0.000437"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.319166" elapsed="0.000697"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.318754" elapsed="0.001136"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:38.320084" elapsed="0.000405"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:21:38.321069" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:38.320743" elapsed="0.000360"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:21:38.321312" elapsed="0.000294"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:21:38.313343" elapsed="0.008379"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:21:38.321925" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-10-06T01:21:38.321811" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.321788" elapsed="0.000247"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.322228" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:21:38.322317" elapsed="0.000019"/>
</return>
<msg time="2026-10-06T01:21:38.322615" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:21:38.301487" elapsed="0.021182"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:21:38.322760" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:21:38.322931" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:21:38.299295" elapsed="0.023670"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.324397" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:38.323961" elapsed="0.000528"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:21:38.323738" elapsed="0.000801"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:21:38.323557" elapsed="0.001020"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:21:38.323247" elapsed="0.001414"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:38.296861" elapsed="0.027870"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.328498" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:38.328122" elapsed="0.000429"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:21:38.328610" elapsed="0.000057"/>
</return>
<msg time="2026-10-06T01:21:38.328827" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:21:38.327651" elapsed="0.001207"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.330539" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.330230" elapsed="0.000431"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.331472" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.330946" elapsed="0.000584"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:38.344997" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0196abtsaqd8g4mpvcap0t4mk0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:38.345140" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:21:38.345333" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:38.331972" elapsed="0.013396"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.331616" elapsed="0.013807"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.345700" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.345457" elapsed="0.000329"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.331592" elapsed="0.014222"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.347559" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.347108" elapsed="0.000510"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.346772" elapsed="0.000929"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.346747" elapsed="0.000988"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.348509" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.348135" elapsed="0.000432"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.347807" elapsed="0.000804"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.347786" elapsed="0.000878"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.349405" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:38.348924" elapsed="0.000516"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.349853" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.349529" elapsed="0.000400"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.350545" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:38.350179" elapsed="0.000399"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.349960" elapsed="0.000664"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.349507" elapsed="0.001164"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.351395" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:38.350926" elapsed="0.000504"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.351837" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.351519" elapsed="0.000393"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.352523" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:38.352161" elapsed="0.000396"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.351944" elapsed="0.000657"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.351496" elapsed="0.001133"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:38.352860" elapsed="0.000404"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:21:38.353824" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:38.353481" elapsed="0.000377"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:21:38.354065" elapsed="0.000291"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:21:38.346256" elapsed="0.008179"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:21:38.354650" elapsed="0.000054"/>
</return>
<status status="PASS" start="2026-10-06T01:21:38.354522" elapsed="0.000227"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.354499" elapsed="0.000324"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.355026" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:21:38.355116" elapsed="0.000019"/>
</return>
<msg time="2026-10-06T01:21:38.355415" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:21:38.329341" elapsed="0.026109"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:21:38.355514" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:21:38.355726" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:21:38.327060" elapsed="0.028701"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.357184" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:38.356753" elapsed="0.000519"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:21:38.356497" elapsed="0.000826"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:21:38.356354" elapsed="0.001008"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:21:38.356043" elapsed="0.001384"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:38.324844" elapsed="0.032626"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.361225" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:38.360848" elapsed="0.000411"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:21:38.361318" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:21:38.361487" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:21:38.360369" elapsed="0.001150"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.363148" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.362839" elapsed="0.000366"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.363801" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.363465" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:38.377460" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0gusd5pkzmwglcb3p20r9r8j10.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:38.377602" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:21:38.377765" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:38.364252" elapsed="0.013547"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.363943" elapsed="0.013910"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.378095" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.377886" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.363919" elapsed="0.014284"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.379967" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.379478" elapsed="0.000549"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.379148" elapsed="0.000923"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.379124" elapsed="0.000979"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.380914" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.380501" elapsed="0.000472"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.380175" elapsed="0.000841"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.380154" elapsed="0.000893"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.381800" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:38.381284" elapsed="0.000551"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.382207" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.381925" elapsed="0.000399"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.382999" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:38.382579" elapsed="0.000454"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.382359" elapsed="0.000720"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.381902" elapsed="0.001205"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.383846" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:38.383340" elapsed="0.000541"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.384248" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.383970" elapsed="0.000352"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.384978" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:38.384565" elapsed="0.000447"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.384352" elapsed="0.000706"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.383948" elapsed="0.001138"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:38.385279" elapsed="0.000440"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:21:38.386248" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:38.385943" elapsed="0.000339"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:21:38.386488" elapsed="0.000333"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:21:38.378658" elapsed="0.008241"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:21:38.387100" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:21:38.386986" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.386963" elapsed="0.000244"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.387398" elapsed="0.000027"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:21:38.387487" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:21:38.387826" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:21:38.361959" elapsed="0.025902"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:21:38.387930" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:21:38.388100" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:21:38.359786" elapsed="0.028346"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.389795" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:38.389332" elapsed="0.000548"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:21:38.389110" elapsed="0.000821"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:21:38.388767" elapsed="0.001203"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:21:38.388412" elapsed="0.001626"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:38.357581" elapsed="0.032501"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:38.296555" elapsed="0.093563"/>
</for>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:21:38.292178" elapsed="0.098004"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:21:38.285382" elapsed="0.104867"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.396471" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:38.396021" elapsed="0.000485"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.397121" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:38.396748" elapsed="0.000450"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:38.397258" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:21:38.397436" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:38.395495" elapsed="0.001972"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.400324" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:21:38.400057" elapsed="0.000291"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:21:38.400391" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:21:38.400512" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:21:38.399737" elapsed="0.000799"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.401741" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.401487" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.402196" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.401971" elapsed="0.000264"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:38.411521" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:38.411733" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '6157'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;4751e290-1144-4989-835c-4a6087613b63&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8361c3c3-061f-4f86-bc75-fbc902a226f8&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0efe4d72-9818-4679-b069-7c8c272a9d6e&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;92:e2:51:47:89:49&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;4&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vx1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;a252ed10-41a0-46d2-aeee-4badacdd2e86&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vx1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;b9a66fcf-c42f-4608-b883-275d885d6def&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:92:e2:51:47:89:49&lt;/datapath-id&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:21:38.411933" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:38.402524" elapsed="0.009435"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.402301" elapsed="0.009697"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.412172" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.412023" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.402284" elapsed="0.009967"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.413558" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;4751e290-1144-4989-835c-4a6087613b63&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8361c3c3-061f-4f86-bc75-fbc902a226f8&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0efe4d72-9818-4679-b069-7c8c272a9d6e&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;92:e2:51:47:89:49&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;4&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vx1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;a252ed10-41a0-46d2-aeee-4badacdd2e86&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vx1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;b9a66fcf-c42f-4608-b883-275d885d6def&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:92:e2:51:47:89:49&lt;/datapath-id&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.413179" elapsed="0.000544"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.412943" elapsed="0.000814"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.412925" elapsed="0.000855"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.414333" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.414068" elapsed="0.000306"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.413832" elapsed="0.000574"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.413817" elapsed="0.000611"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.414979" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:38.414600" elapsed="0.000405"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.415409" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.415198" elapsed="0.000266"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.415941" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:38.415659" elapsed="0.000307"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.415487" elapsed="0.000513"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.415052" elapsed="0.000969"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.416529" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:38.416191" elapsed="0.000363"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.416849" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.416617" elapsed="0.000290"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.417345" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:38.417084" elapsed="0.000285"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.416929" elapsed="0.000473"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.416601" elapsed="0.000821"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:38.417561" elapsed="0.000326"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:21:38.418263" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:38.418044" elapsed="0.000244"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:21:38.418436" elapsed="0.000223"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:21:38.412570" elapsed="0.006161"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:21:38.418876" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:38.418794" elapsed="0.000137"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.418777" elapsed="0.000176"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.419091" elapsed="0.000019"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:21:38.419153" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:21:38.419420" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1&lt;/node-id...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:21:38.400884" elapsed="0.018564"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:21:38.419494" elapsed="0.000024"/>
</return>
<msg time="2026-10-06T01:21:38.419614" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1&lt;/node-id...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:21:38.399304" elapsed="0.020349"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.420686" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:38.420352" elapsed="0.000423"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:21:38.420194" elapsed="0.000617"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:21:38.420092" elapsed="0.000747"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:21:38.419870" elapsed="0.001017"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:38.397722" elapsed="0.023227"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.423476" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:38.423208" elapsed="0.000294"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:21:38.423543" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:21:38.423691" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:21:38.422889" elapsed="0.000826"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.424864" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.424614" elapsed="0.000292"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.425310" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.425093" elapsed="0.000257"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:38.441202" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0196abtsaqd8g4mpvcap0t4mk0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:38.441350" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2768'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"4751e290-1144-4989-835c-4a6087613b63","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"8361c3c3-061f-4f86-bc75-fbc902a226f8","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"0efe4d72-9818-4679-b069-7c8c272a9d6e","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"92:e2:51:47:89:49","ovsdb:ofport":65534,"ovsdb:ifindex":4},{"tp-id":"vx1","ovsdb:port-uuid":"a252ed10-41a0-46d2-aeee-4badacdd2e86","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"b9a66fcf-c42f-4608-b883-275d885d6def","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:92:e2:51:47:89:49"},{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']"}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:21:38.441453" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:38.425645" elapsed="0.015832"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.425411" elapsed="0.016104"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.441721" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.441539" elapsed="0.000241"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.425394" elapsed="0.016407"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.443225" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"4751e290-1144-4989-835c-4a6087613b63","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"8361c3c3-061f-4f86-bc75-fbc902a226f8","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"0efe4d72-9818-4679-b069-7c8c272a9d6e","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"92:e2:51:47:89:49","ovsdb:ofport":65534,"ovsdb:ifindex":4},{"tp-id":"vx1","ovsdb:port-uuid":"a252ed10-41a0-46d2-aeee-4badacdd2e86","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"b9a66fcf-c42f-4608-b883-275d885d6def","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:92:e2:51:47:89:49"},{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']"}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.442710" elapsed="0.000606"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.442448" elapsed="0.000902"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.442430" elapsed="0.000943"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.443961" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.443688" elapsed="0.000314"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.443425" elapsed="0.000609"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.443410" elapsed="0.000647"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.444566" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:38.444224" elapsed="0.000367"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.444892" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.444672" elapsed="0.000273"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.445383" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:38.445121" elapsed="0.000286"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.444967" elapsed="0.000473"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.444654" elapsed="0.000806"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.445989" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:38.445626" elapsed="0.000389"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.446277" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.446078" elapsed="0.000253"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.446807" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:38.446507" elapsed="0.000324"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.446354" elapsed="0.000510"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.446061" elapsed="0.000823"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:38.447023" elapsed="0.000293"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:21:38.447721" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:38.447470" elapsed="0.000276"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:21:38.447899" elapsed="0.000207"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:21:38.442110" elapsed="0.006051"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:21:38.448303" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:38.448222" elapsed="0.000135"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.448206" elapsed="0.000174"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.448516" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:21:38.448578" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:21:38.448868" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:21:38.424008" elapsed="0.024886"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:21:38.448939" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:21:38.449060" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:21:38.422451" elapsed="0.026633"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.450104" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:38.449795" elapsed="0.000382"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:21:38.449611" elapsed="0.000604"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:21:38.449510" elapsed="0.000732"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:21:38.449284" elapsed="0.001006"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:38.421032" elapsed="0.029319"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.452906" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:38.452609" elapsed="0.000322"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:21:38.452973" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:21:38.453094" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:21:38.452286" elapsed="0.000831"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.454270" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.454051" elapsed="0.000261"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.454747" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.454496" elapsed="0.000292"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:38.471052" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0gusd5pkzmwglcb3p20r9r8j10.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:38.471200" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2768'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"4751e290-1144-4989-835c-4a6087613b63","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"8361c3c3-061f-4f86-bc75-fbc902a226f8","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"0efe4d72-9818-4679-b069-7c8c272a9d6e","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"92:e2:51:47:89:49","ovsdb:ofport":65534,"ovsdb:ifindex":4},{"tp-id":"vx1","ovsdb:port-uuid":"a252ed10-41a0-46d2-aeee-4badacdd2e86","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"b9a66fcf-c42f-4608-b883-275d885d6def","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:92:e2:51:47:89:49"},{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']"}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:21:38.471303" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:38.455111" elapsed="0.016215"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.454884" elapsed="0.016481"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.471538" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.471388" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.454833" elapsed="0.016783"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.473083" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"4751e290-1144-4989-835c-4a6087613b63","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"8361c3c3-061f-4f86-bc75-fbc902a226f8","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"0efe4d72-9818-4679-b069-7c8c272a9d6e","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"92:e2:51:47:89:49","ovsdb:ofport":65534,"ovsdb:ifindex":4},{"tp-id":"vx1","ovsdb:port-uuid":"a252ed10-41a0-46d2-aeee-4badacdd2e86","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"b9a66fcf-c42f-4608-b883-275d885d6def","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:92:e2:51:47:89:49"},{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']"}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.472704" elapsed="0.000472"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.472437" elapsed="0.000771"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.472287" elapsed="0.000944"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.473821" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.473516" elapsed="0.000346"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.473281" elapsed="0.000612"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.473267" elapsed="0.000648"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.474433" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:38.474085" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.474756" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.474522" elapsed="0.000287"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.475247" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:38.474986" elapsed="0.000285"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.474832" elapsed="0.000471"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.474505" elapsed="0.000818"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.475856" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:38.475490" elapsed="0.000391"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.476146" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.475945" elapsed="0.000253"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.476655" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:38.476373" elapsed="0.000320"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:38.476220" elapsed="0.000507"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.475929" elapsed="0.000818"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:38.476889" elapsed="0.000294"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:21:38.477564" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:38.477338" elapsed="0.000251"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:21:38.477766" elapsed="0.000211"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:21:38.471961" elapsed="0.006072"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:21:38.478175" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:38.478095" elapsed="0.000134"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.478078" elapsed="0.000180"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.478396" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:21:38.478459" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:21:38.478747" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:21:38.453416" elapsed="0.025358"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:21:38.478820" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:21:38.478942" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:21:38.451868" elapsed="0.027099"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.480003" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:38.479688" elapsed="0.000390"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:21:38.479500" elapsed="0.000614"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:21:38.479398" elapsed="0.000743"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:21:38.479168" elapsed="0.001021"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:38.450434" elapsed="0.029820"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:38.397532" elapsed="0.082750"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:21:38.394831" elapsed="0.085499"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:21:38.390531" elapsed="0.089846"/>
</kw>
<doc>Add Port vx1 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:21:37.799534" elapsed="0.680903"/>
</kw>
<doc>Add port with OVS command and verify it gets applied from all instances.</doc>
<status status="PASS" start="2026-10-06T01:21:37.311803" elapsed="1.168748"/>
</test>
<test id="s1-s1-s1-t6" name="Create Tap Device Before Fail" line="44">
<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-10-06T01:21:38.482026" elapsed="0.000200"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:38.481779" elapsed="0.000500"/>
</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-10-06T01:21:38.483196" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:38.483104" elapsed="0.000135"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.483086" elapsed="0.000174"/>
</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-10-06T01:21:38.485313" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:38.485230" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.485213" elapsed="0.000163"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.486284" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:38.485958" elapsed="0.000352"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.486759" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:38.486458" elapsed="0.000326"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:38.486824" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:21:38.486949" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:38.485573" elapsed="0.001400"/>
</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-10-06T01:21:38.489366" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:38.489281" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.489263" elapsed="0.000167"/>
</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-10-06T01:21:38.490547" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:38.490464" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.490448" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:38.491020" 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-10-06T01:21:38.490788" elapsed="0.000257"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:38.491402" 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-10-06T01:21:38.491226" elapsed="0.000200"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:38.533802" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:38.492035" elapsed="0.041942"/>
</kw>
<msg time="2026-10-06T01:21:38.534136" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:38.534177" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:38.491580" elapsed="0.042632"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:38.615888" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "B "e "f "o "r "[78Ce "[A[78C
 "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:38.534832" elapsed="0.081232"/>
</kw>
<msg time="2026-10-06T01:21:38.616254" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:38.616296" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:38.534379" elapsed="0.081953"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.616608" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.616403" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.616384" elapsed="0.000356"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.617256" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "B "e "f "o "r "[78Ce "[A[78C
 "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.616920" elapsed="0.000413"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.617590" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.617395" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.617378" elapsed="0.000339"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:38.617748" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:38.620231" elapsed="0.000514"/>
</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-10-06T01:21:38.621990" elapsed="0.002119"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:38.625343" elapsed="0.000351"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:38.618511" elapsed="0.007255"/>
</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-10-06T01:21:38.618019" elapsed="0.007871"/>
</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="PASS" start="2026-10-06T01:21:38.490206" elapsed="0.135763"/>
</kw>
<msg time="2026-10-06T01:21:38.626055" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:38.626093" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:38.489583" elapsed="0.136546"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:38.626285" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:38.626199" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.626181" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:38.626715" elapsed="0.000026"/>
</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-10-06T01:21:38.627014" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:38.627078" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:38.488994" elapsed="0.138168"/>
</kw>
<msg time="2026-10-06T01:21:38.627244" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:38.627283" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:38.487291" elapsed="0.140027"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.627596" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.627384" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.627368" elapsed="0.000388"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:38.487153" elapsed="0.140627"/>
</iter>
<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-10-06T01:21:38.630150" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:38.630066" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.630049" elapsed="0.000163"/>
</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-10-06T01:21:38.631339" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:38.631226" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.631210" elapsed="0.000195"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:38.631809" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:38.631547" elapsed="0.000287"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:38.632160" 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-10-06T01:21:38.631992" elapsed="0.000192"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:38.680307" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:38.632785" elapsed="0.047696"/>
</kw>
<msg time="2026-10-06T01:21:38.680651" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:38.680715" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:38.632336" elapsed="0.048417"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:38.762793" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "B "e "f "o "r "[78Ce "[A[78C
 "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:38.681336" elapsed="0.081638"/>
</kw>
<msg time="2026-10-06T01:21:38.763138" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:38.763181" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:38.680916" elapsed="0.082300"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.763498" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.763289" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.763269" elapsed="0.000325"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.764156" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "B "e "f "o "r "[78Ce "[A[78C
 "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.763808" elapsed="0.000426"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.764498" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.764301" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.764279" elapsed="0.000312"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:38.764622" elapsed="0.000040"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:38.767126" elapsed="0.000478"/>
</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-10-06T01:21:38.768862" elapsed="0.000450"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:38.770485" elapsed="0.000689"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:38.765416" elapsed="0.005826"/>
</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-10-06T01:21:38.764919" elapsed="0.006439"/>
</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="PASS" start="2026-10-06T01:21:38.630972" elapsed="0.140463"/>
</kw>
<msg time="2026-10-06T01:21:38.771518" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:38.771558" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:38.630358" elapsed="0.141235"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:38.771783" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:38.771695" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.771660" elapsed="0.000201"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.772176" elapsed="0.000024"/>
</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-10-06T01:21:38.772508" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:38.772574" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:38.629780" elapsed="0.142979"/>
</kw>
<msg time="2026-10-06T01:21:38.772850" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:38.772891" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:38.628027" elapsed="0.144899"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.773213" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.772996" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.772979" elapsed="0.000305"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:38.627891" elapsed="0.145415"/>
</iter>
<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-10-06T01:21:38.775646" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:38.775548" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.775531" elapsed="0.000200"/>
</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-10-06T01:21:38.776839" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:38.776755" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.776738" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:38.777268" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:38.777045" elapsed="0.000248"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:38.777616" 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-10-06T01:21:38.777451" elapsed="0.000202"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:38.827196" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:38.778239" elapsed="0.049131"/>
</kw>
<msg time="2026-10-06T01:21:38.827558" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:38.827600" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:38.777824" elapsed="0.049825"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:38.897697" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "B "e "f "o "r "[78Ce "[A[78C
 "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:38.828251" elapsed="0.069617"/>
</kw>
<msg time="2026-10-06T01:21:38.898025" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:38.898066" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:38.827833" elapsed="0.070268"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.898374" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.898171" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.898153" elapsed="0.000314"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.899021" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "B "e "f "o "r "[78Ce "[A[78C
 "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:38.898658" elapsed="0.000439"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.899354" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.899159" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.899142" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:38.899478" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:38.901995" elapsed="0.000477"/>
</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-10-06T01:21:38.903723" elapsed="0.000459"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:38.905372" elapsed="0.000480"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:38.900303" elapsed="0.005617"/>
</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-10-06T01:21:38.899772" elapsed="0.006267"/>
</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="PASS" start="2026-10-06T01:21:38.776458" elapsed="0.129658"/>
</kw>
<msg time="2026-10-06T01:21:38.906197" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:38.906237" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:38.775880" elapsed="0.130393"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:38.906428" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:38.906343" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.906326" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.907163" elapsed="0.000024"/>
</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-10-06T01:21:38.907463" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:38.907529" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:38.775257" elapsed="0.132359"/>
</kw>
<msg time="2026-10-06T01:21:38.907729" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:38.907770" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:38.773550" elapsed="0.134255"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.908092" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.907874" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.907858" elapsed="0.000306"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:38.773413" elapsed="0.134773"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:38.487019" elapsed="0.421193"/>
</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-10-06T01:21:38.484932" elapsed="0.423329"/>
</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-10-06T01:21:38.482850" elapsed="0.425461"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:38.482427" elapsed="0.425925"/>
</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-10-06T01:21:38.481412" elapsed="0.426987"/>
</kw>
<kw name="Create Sample Tap Device" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:38.910576" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:38.910342" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:38.910325" elapsed="0.000339"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:38.911005" 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-10-06T01:21:38.911096" 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-10-06T01:21:38.910883" elapsed="0.000237"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.911604" level="INFO">Attempting to execute command "ip tuntap add mode tap vport1" on remote system "10.30.170.234" 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-10-06T01:21:38.911318" elapsed="0.000342"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:38.912188" level="INFO">${conn_id} = 51</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-10-06T01:21:38.911890" elapsed="0.000323"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:21:38.913036" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:21:38.913107" 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-10-06T01:21:38.912788" elapsed="0.000341"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:38.913279" elapsed="0.000286"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:21:38.914348" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:21:39.289791" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:20:56 UTC 2026

  System load:  0.16               Processes:             110
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:21:38 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:21:38.914120" elapsed="0.375754"/>
</kw>
<msg time="2026-10-06T01:21:39.289932" 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-10-06T01:21:38.913758" elapsed="0.376233"/>
</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-10-06T01:21:38.912403" elapsed="0.377669"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:21:39.290430" level="INFO">Executing command 'ip tuntap add mode tap vport1'.</msg>
<msg time="2026-10-06T01:21:39.303421" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-10-06T01:21:39.303522" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:21:39.303562" level="INFO">${stderr} = ioctl(TUNSETIFF): Operation not permitted</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-10-06T01:21:39.290278" elapsed="0.013305"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:39.303777" elapsed="0.000272"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:39.304708" level="INFO">ioctl(TUNSETIFF): Operation not permitted</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:39.304348" elapsed="0.000420"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:39.304988" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:39.304858" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:39.304831" elapsed="0.000245"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:21:39.305254" elapsed="0.000032"/>
</return>
<status status="PASS" start="2026-10-06T01:21:39.305141" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:39.305122" elapsed="0.000237"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:39.305401" elapsed="0.000018"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:39.306383" elapsed="0.000423"/>
</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-10-06T01:21:39.307059" elapsed="0.000186"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:39.307437" elapsed="0.000122"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:39.305837" elapsed="0.001805"/>
</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-10-06T01:21:38.909925" elapsed="0.397839"/>
</kw>
<msg time="2026-10-06T01:21:39.307830" 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-10-06T01:21:38.909389" elapsed="0.398505"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ip tuntap add mode tap vport1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:21:38.908979" elapsed="0.399013"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:39.310561" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:39.310241" elapsed="0.000412"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:39.310216" elapsed="0.000493"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:39.311140" 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-10-06T01:21:39.311267" 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-10-06T01:21:39.310976" elapsed="0.000325"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:39.312009" level="INFO">Attempting to execute command "ip tuntap add mode tap vport2" on remote system "10.30.170.234" 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-10-06T01:21:39.311558" elapsed="0.000511"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:39.312752" level="INFO">${conn_id} = 53</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-10-06T01:21:39.312309" elapsed="0.000478"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:21:39.313919" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:21:39.314016" 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-10-06T01:21:39.313544" elapsed="0.000503"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:39.314252" elapsed="0.000406"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:21:39.315764" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:21:39.774853" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:20:56 UTC 2026

  System load:  0.16               Processes:             110
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:21:39 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:21:39.315407" elapsed="0.459616"/>
</kw>
<msg time="2026-10-06T01:21:39.775111" 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-10-06T01:21:39.314905" elapsed="0.460297"/>
</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-10-06T01:21:39.313053" elapsed="0.462264"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:21:39.775893" level="INFO">Executing command 'ip tuntap add mode tap vport2'.</msg>
<msg time="2026-10-06T01:21:39.788527" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-10-06T01:21:39.788650" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:21:39.788709" level="INFO">${stderr} = ioctl(TUNSETIFF): Operation not permitted</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-10-06T01:21:39.775633" elapsed="0.013100"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:39.788909" elapsed="0.000329"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:39.790009" level="INFO">ioctl(TUNSETIFF): Operation not permitted</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:39.789575" elapsed="0.000492"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:39.790351" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:39.790183" elapsed="0.000234"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:39.790146" elapsed="0.000304"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:21:39.790650" elapsed="0.000054"/>
</return>
<status status="PASS" start="2026-10-06T01:21:39.790519" elapsed="0.000230"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:39.790499" elapsed="0.000282"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:39.790824" elapsed="0.000019"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:39.791886" elapsed="0.000402"/>
</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-10-06T01:21:39.792541" elapsed="0.000240"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:39.792978" elapsed="0.000201"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:39.791260" elapsed="0.001985"/>
</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-10-06T01:21:39.309636" elapsed="0.483707"/>
</kw>
<msg time="2026-10-06T01:21:39.793409" 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-10-06T01:21:39.308851" elapsed="0.484621"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ip tuntap add mode tap vport2</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:21:39.308235" elapsed="0.485338"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:39.796152" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:39.795825" elapsed="0.000399"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:39.795799" elapsed="0.000457"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:39.796736" 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-10-06T01:21:39.796868" 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-10-06T01:21:39.796522" elapsed="0.000380"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:39.797599" level="INFO">Attempting to execute command "ifconfig vport1 up" on remote system "10.30.170.234" 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-10-06T01:21:39.797194" elapsed="0.000500"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:39.798356" level="INFO">${conn_id} = 55</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-10-06T01:21:39.797940" elapsed="0.000450"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:21:39.799540" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:21:39.799655" 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-10-06T01:21:39.799188" elapsed="0.000518"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:39.799913" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:21:39.801388" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:21:40.183278" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:20:56 UTC 2026

  System load:  0.16               Processes:             110
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:21:39 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:21:39.801070" elapsed="0.382290"/>
</kw>
<msg time="2026-10-06T01:21:40.183415" 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-10-06T01:21:39.800526" elapsed="0.382941"/>
</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-10-06T01:21:39.798693" elapsed="0.384849"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:21:40.183908" level="INFO">Executing command 'ifconfig vport1 up'.</msg>
<msg time="2026-10-06T01:21:40.196566" level="INFO">Command exited with return code 255.</msg>
<msg time="2026-10-06T01:21:40.196747" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:21:40.196802" level="INFO">${stderr} = vport1: ERROR while getting interface flags: No such device</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-10-06T01:21:40.183763" elapsed="0.013069"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:40.197045" elapsed="0.000264"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:40.197950" level="INFO">vport1: ERROR while getting interface flags: No such device</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:40.197590" elapsed="0.000467"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:40.198282" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:40.198148" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:40.198121" elapsed="0.000253"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:21:40.198554" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-10-06T01:21:40.198441" elapsed="0.000206"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:40.198422" elapsed="0.000279"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:40.198746" elapsed="0.000019"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:40.199708" elapsed="0.000390"/>
</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-10-06T01:21:40.200352" elapsed="0.000187"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:40.200769" elapsed="0.000125"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:40.199135" elapsed="0.001825"/>
</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-10-06T01:21:39.795204" elapsed="0.405850"/>
</kw>
<msg time="2026-10-06T01:21:40.201118" 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-10-06T01:21:39.794444" elapsed="0.406735"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ifconfig vport1 up</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:21:39.793857" elapsed="0.407423"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:40.203834" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:40.203474" elapsed="0.000434"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:40.203448" elapsed="0.000491"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:40.204368" 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-10-06T01:21:40.204493" 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-10-06T01:21:40.204202" elapsed="0.000325"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:40.205222" level="INFO">Attempting to execute command "ifconfig vport2 up" on remote system "10.30.170.234" 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-10-06T01:21:40.204822" elapsed="0.000460"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:40.205967" level="INFO">${conn_id} = 57</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-10-06T01:21:40.205522" elapsed="0.000479"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:21:40.207135" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:21:40.207230" 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-10-06T01:21:40.206792" elapsed="0.000468"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:40.207462" elapsed="0.000432"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:21:40.209209" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:21:40.595784" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:20:56 UTC 2026

  System load:  0.16               Processes:             110
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:21:40 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:21:40.208646" elapsed="0.387221"/>
</kw>
<msg time="2026-10-06T01:21:40.595966" 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-10-06T01:21:40.208116" elapsed="0.387907"/>
</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-10-06T01:21:40.206266" elapsed="0.389835"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:21:40.596462" level="INFO">Executing command 'ifconfig vport2 up'.</msg>
<msg time="2026-10-06T01:21:40.609284" level="INFO">Command exited with return code 255.</msg>
<msg time="2026-10-06T01:21:40.609388" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:21:40.609427" level="INFO">${stderr} = vport2: ERROR while getting interface flags: No such device</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-10-06T01:21:40.596306" elapsed="0.013143"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:40.609625" elapsed="0.000224"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:40.610298" level="INFO">vport2: ERROR while getting interface flags: No such device</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:40.610058" elapsed="0.000282"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:40.610505" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:40.610409" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:40.610388" elapsed="0.000182"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:21:40.610733" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:40.610632" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:40.610617" elapsed="0.000194"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:40.610841" elapsed="0.000013"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:40.611522" elapsed="0.000311"/>
</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-10-06T01:21:40.612015" elapsed="0.000142"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:40.612296" elapsed="0.000087"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:40.611127" elapsed="0.001302"/>
</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-10-06T01:21:40.202883" elapsed="0.409618"/>
</kw>
<msg time="2026-10-06T01:21:40.612548" 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-10-06T01:21:40.202134" elapsed="0.410459"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ifconfig vport2 up</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:21:40.201521" elapsed="0.411175"/>
</kw>
<doc>Create Tap Device vport1 and vport2 to add to the bridge br-s1 using OVS command.</doc>
<status status="PASS" start="2026-10-06T01:21:38.908595" elapsed="1.704155"/>
</kw>
<doc>Create tap devices to add to the bridge in ovs</doc>
<status status="PASS" start="2026-10-06T01:21:38.480906" elapsed="2.131963"/>
</test>
<test id="s1-s1-s1-t7" name="Add Tap Device Manually and Verify Before Fail" line="48">
<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-10-06T01:21:40.614407" elapsed="0.000214"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:40.614159" elapsed="0.000513"/>
</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-10-06T01:21:40.615580" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:40.615491" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:40.615472" elapsed="0.000190"/>
</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-10-06T01:21:40.617851" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:40.617765" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:40.617747" elapsed="0.000167"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:40.618836" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:40.618478" elapsed="0.000383"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:40.619285" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:40.619012" elapsed="0.000296"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:40.619349" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:21:40.619510" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:40.618120" elapsed="0.001413"/>
</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-10-06T01:21:40.621993" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:40.621907" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:40.621890" elapsed="0.000167"/>
</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-10-06T01:21:40.623195" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:40.623111" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:40.623094" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:40.623657" 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-10-06T01:21:40.623402" elapsed="0.000299"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:40.624041" 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-10-06T01:21:40.623867" elapsed="0.000198"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:40.652260" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:40.624658" elapsed="0.027805"/>
</kw>
<msg time="2026-10-06T01:21:40.652639" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:40.652700" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:40.624219" elapsed="0.028518"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:40.706836" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:40.653329" elapsed="0.053692"/>
</kw>
<msg time="2026-10-06T01:21:40.707178" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:40.707220" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:40.652903" elapsed="0.054353"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:40.707531" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:40.707327" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:40.707308" elapsed="0.000334"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:40.708184" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:40.707846" elapsed="0.000422"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:40.708525" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:40.708330" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:40.708313" elapsed="0.000320"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:40.708664" elapsed="0.000044"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:40.711138" elapsed="0.000484"/>
</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-10-06T01:21:40.712863" elapsed="0.000576"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:40.714629" elapsed="0.000350"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:40.709444" elapsed="0.005601"/>
</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-10-06T01:21:40.708956" elapsed="0.006203"/>
</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="PASS" start="2026-10-06T01:21:40.622852" elapsed="0.092383"/>
</kw>
<msg time="2026-10-06T01:21:40.715350" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:40.715389" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:40.622202" elapsed="0.093223"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:40.715579" elapsed="0.000042"/>
</return>
<status status="PASS" start="2026-10-06T01:21:40.715496" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:40.715479" elapsed="0.000395"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:40.716203" elapsed="0.000024"/>
</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-10-06T01:21:40.716503" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:40.716568" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:40.621589" elapsed="0.095079"/>
</kw>
<msg time="2026-10-06T01:21:40.716768" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:40.716808" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:40.619910" elapsed="0.096934"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:40.717128" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:40.716911" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:40.716896" elapsed="0.000303"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:40.619769" elapsed="0.097450"/>
</iter>
<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-10-06T01:21:40.719648" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:40.719549" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:40.719532" elapsed="0.000193"/>
</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-10-06T01:21:40.720825" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:40.720739" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:40.720721" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:40.721251" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:40.721027" elapsed="0.000253"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:40.721622" 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-10-06T01:21:40.721441" elapsed="0.000206"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:40.799756" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:40.722228" elapsed="0.077703"/>
</kw>
<msg time="2026-10-06T01:21:40.800105" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:40.800148" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:40.721819" elapsed="0.078364"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:40.882665" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:40.800800" elapsed="0.082058"/>
</kw>
<msg time="2026-10-06T01:21:40.883015" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:40.883056" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:40.800348" elapsed="0.082744"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:40.883364" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:40.883161" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:40.883144" elapsed="0.000347"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:40.884047" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:40.883706" elapsed="0.000427"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:40.884392" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:40.884195" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:40.884178" elapsed="0.000307"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:40.884516" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:40.887001" elapsed="0.000476"/>
</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-10-06T01:21:40.888750" elapsed="0.000456"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:40.890566" elapsed="0.000473"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:40.885308" elapsed="0.005799"/>
</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-10-06T01:21:40.884812" elapsed="0.006411"/>
</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="PASS" start="2026-10-06T01:21:40.720440" elapsed="0.170860"/>
</kw>
<msg time="2026-10-06T01:21:40.891381" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:40.891420" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:40.719872" elapsed="0.171584"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:40.891626" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:21:40.891525" elapsed="0.000235"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:40.891507" elapsed="0.000278"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:40.892100" elapsed="0.000024"/>
</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-10-06T01:21:40.892397" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:40.892462" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:40.719264" elapsed="0.173283"/>
</kw>
<msg time="2026-10-06T01:21:40.892645" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:40.892703" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:40.717467" elapsed="0.175273"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:40.893027" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:40.892810" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:40.892793" elapsed="0.000305"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:40.717331" elapsed="0.175788"/>
</iter>
<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-10-06T01:21:40.895539" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:40.895454" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:40.895437" elapsed="0.000179"/>
</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-10-06T01:21:40.896738" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:40.896626" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:40.896592" elapsed="0.000210"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:40.897165" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:40.896942" elapsed="0.000248"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:40.897512" 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-10-06T01:21:40.897346" elapsed="0.000221"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:40.943446" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:40.898181" elapsed="0.045455"/>
</kw>
<msg time="2026-10-06T01:21:40.943836" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:40.943878" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:40.897760" elapsed="0.046155"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:41.056986" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:40.944498" elapsed="0.112671"/>
</kw>
<msg time="2026-10-06T01:21:41.057325" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:41.057368" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:40.944081" elapsed="0.113324"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.057752" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:41.057475" elapsed="0.000350"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.057457" elapsed="0.000392"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.058368" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.058031" elapsed="0.000421"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.058746" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:41.058513" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.058497" elapsed="0.000343"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:41.058871" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:41.061304" elapsed="0.000506"/>
</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-10-06T01:21:41.063016" elapsed="0.000446"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:41.064637" elapsed="0.000677"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:41.059639" elapsed="0.005742"/>
</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-10-06T01:21:41.059140" elapsed="0.006354"/>
</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="PASS" start="2026-10-06T01:21:40.896354" elapsed="0.169215"/>
</kw>
<msg time="2026-10-06T01:21:41.065666" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:41.065745" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:40.895780" elapsed="0.170003"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:41.065940" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:41.065854" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.065837" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.066326" elapsed="0.000024"/>
</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-10-06T01:21:41.066640" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:41.066750" 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="PASS" start="2026-10-06T01:21:40.895166" elapsed="0.171672"/>
</kw>
<msg time="2026-10-06T01:21:41.066956" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:41.066998" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:40.893365" elapsed="0.173669"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.067323" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:41.067107" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.067089" elapsed="0.000306"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:40.893227" elapsed="0.174190"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:40.619588" elapsed="0.447855"/>
</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-10-06T01:21:40.617438" elapsed="0.450055"/>
</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-10-06T01:21:40.615231" elapsed="0.452312"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:40.614833" elapsed="0.452750"/>
</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-10-06T01:21:40.613811" elapsed="0.453834"/>
</kw>
<kw name="Add Sample Tap Device To The Manual Bridge And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.071101" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:41.070868" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.070851" elapsed="0.000324"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:41.071494" 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-10-06T01:21:41.071584" 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-10-06T01:21:41.071372" elapsed="0.000252"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.072117" level="INFO">Attempting to execute command "sudo ovs-vsctl add-port br-s1 vport1 -- add-port br-s1 vport2" on remote system "10.30.170.234" 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-10-06T01:21:41.071828" elapsed="0.000332"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:41.072661" level="INFO">${conn_id} = 62</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-10-06T01:21:41.072333" elapsed="0.000366"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.073498" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:21:41.073566" 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-10-06T01:21:41.073245" elapsed="0.000343"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:41.073769" elapsed="0.000280"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:21:41.074833" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:21:41.444689" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:20:56 UTC 2026

  System load:  0.16               Processes:             110
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:21:40 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:21:41.074572" elapsed="0.370193"/>
</kw>
<msg time="2026-10-06T01:21:41.444820" 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-10-06T01:21:41.074208" elapsed="0.370665"/>
</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-10-06T01:21:41.072892" elapsed="0.372092"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:21:41.445323" level="INFO">Executing command 'sudo ovs-vsctl add-port br-s1 vport1 -- add-port br-s1 vport2'.</msg>
<msg time="2026-10-06T01:21:41.498767" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:21:41.498989" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:21:41.499078" level="INFO">${stderr} = ovs-vsctl: Error detected while setting up 'vport1': could not open network device vport1 (No such device).  See ovs-vswitchd log for details.
ovs-vsctl: Error detected while setting up 'vport2': coul...</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-10-06T01:21:41.445180" elapsed="0.053949"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:41.499474" elapsed="0.000611"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.501117" level="INFO">ovs-vsctl: Error detected while setting up 'vport1': could not open network device vport1 (No such device).  See ovs-vswitchd log for details.
ovs-vsctl: Error detected while setting up 'vport2': could not open network device vport2 (No such device).  See ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/var/log/openvswitch".</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.500537" elapsed="0.000679"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:41.501557" elapsed="0.000057"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:41.501356" elapsed="0.000350"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.501315" elapsed="0.000443"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:21:41.502051" elapsed="0.000053"/>
</return>
<status status="PASS" start="2026-10-06T01:21:41.501867" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.501835" elapsed="0.000396"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:41.502302" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:41.503874" elapsed="0.000609"/>
</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-10-06T01:21:41.504946" elapsed="0.000300"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:41.505555" elapsed="0.000250"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:41.502968" elapsed="0.002941"/>
</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-10-06T01:21:41.070419" elapsed="0.435641"/>
</kw>
<msg time="2026-10-06T01:21:41.506161" 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-10-06T01:21:41.069918" elapsed="0.436341"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-port br-s1 vport1 -- add-port br-s1 vport2</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:21:41.069466" elapsed="0.436944"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.507563" level="INFO">${dictionary_operational} = {'vport1': '2', 'vport2': '2'}</msg>
<var>${dictionary_operational}</var>
<arg>vport1=2</arg>
<arg>vport2=2</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:21:41.506876" elapsed="0.000769"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.508799" level="INFO">${dictionary_config} = {'vport1': '0', 'vport2': '0'}</msg>
<var>${dictionary_config}</var>
<arg>vport1=0</arg>
<arg>vport2=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:21:41.508099" elapsed="0.000755"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.518748" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:41.517969" elapsed="0.000837"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.519782" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:41.519136" elapsed="0.000701"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:41.519925" elapsed="0.000059"/>
</return>
<msg time="2026-10-06T01:21:41.520202" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:41.517143" elapsed="0.003108"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.524998" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:21:41.524603" elapsed="0.000430"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:21:41.525140" elapsed="0.000039"/>
</return>
<msg time="2026-10-06T01:21:41.525317" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:21:41.524147" elapsed="0.001202"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.527009" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.526699" elapsed="0.000375"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.527653" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.527332" elapsed="0.000397"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:41.538194" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:41.538373" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '144'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:21:41.538515" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:41.530218" elapsed="0.008331"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.527814" elapsed="0.010809"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.538898" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:41.538658" elapsed="0.000323"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.527790" elapsed="0.011219"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.540829" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.540329" elapsed="0.000564"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.539980" elapsed="0.000957"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.539956" elapsed="0.001013"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.541780" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.541364" elapsed="0.000474"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.541039" elapsed="0.000843"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.541019" elapsed="0.000894"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.542671" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:41.542155" elapsed="0.000572"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.543108" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:41.542818" elapsed="0.000366"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.543851" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:41.543437" elapsed="0.000448"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.543215" elapsed="0.000717"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.542795" elapsed="0.001169"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.544715" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:41.544201" elapsed="0.000551"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.545126" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:41.544842" elapsed="0.000356"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.545858" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:41.545448" elapsed="0.000445"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.545230" elapsed="0.000707"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.544818" elapsed="0.001148"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:41.546161" elapsed="0.000409"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:21:41.547145" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:41.546824" elapsed="0.000355"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:21:41.547387" elapsed="0.000337"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:21:41.539463" elapsed="0.008386"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:21:41.548051" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:21:41.547936" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.547913" elapsed="0.000246"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.548350" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:21:41.548438" elapsed="0.000019"/>
</return>
<msg time="2026-10-06T01:21:41.548780" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:21:41.525819" elapsed="0.023000"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:21:41.548884" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:21:41.549052" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:21:41.523551" elapsed="0.025537"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.550529" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:41.550095" elapsed="0.000542"/>
</kw>
<var name="${item}">vport1</var>
<status status="PASS" start="2026-10-06T01:21:41.549874" elapsed="0.000839"/>
</iter>
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.551452" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:41.551040" elapsed="0.000494"/>
</kw>
<var name="${item}">vport2</var>
<status status="PASS" start="2026-10-06T01:21:41.550820" elapsed="0.000781"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:21:41.549724" elapsed="0.001915"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:21:41.549369" elapsed="0.002361"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:41.520641" elapsed="0.031134"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.555608" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:41.555219" elapsed="0.000426"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:21:41.555724" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:21:41.555897" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:21:41.554774" elapsed="0.001155"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.557790" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.557223" elapsed="0.000629"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.558434" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.558118" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:41.571938" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0196abtsaqd8g4mpvcap0t4mk0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:41.572080" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:21:41.572199" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:41.558940" elapsed="0.013292"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.558577" elapsed="0.013710"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.572533" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:41.572321" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.558553" elapsed="0.014116"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.574438" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.573984" elapsed="0.000563"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.573628" elapsed="0.000982"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.573603" elapsed="0.001040"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.575441" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.575066" elapsed="0.000433"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.574736" elapsed="0.000807"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.574712" elapsed="0.000862"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.576343" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:41.575852" elapsed="0.000526"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.576791" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:41.576469" elapsed="0.000398"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.577481" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:41.577114" elapsed="0.000401"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.576898" elapsed="0.000663"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.576446" elapsed="0.001162"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.578342" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:41.577867" elapsed="0.000510"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.578783" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:41.578467" elapsed="0.000392"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.579476" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:41.579112" elapsed="0.000398"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.578890" elapsed="0.000665"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.578444" elapsed="0.001155"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:41.579817" elapsed="0.000411"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:21:41.580788" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:41.580446" elapsed="0.000377"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:21:41.581029" elapsed="0.000290"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:21:41.573135" elapsed="0.008262"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:21:41.581611" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-10-06T01:21:41.581483" elapsed="0.000228"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.581460" elapsed="0.000284"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.581940" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:21:41.582027" elapsed="0.000019"/>
</return>
<msg time="2026-10-06T01:21:41.582326" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:21:41.556336" elapsed="0.026025"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:21:41.582424" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:21:41.582610" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:21:41.554152" elapsed="0.028492"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.584072" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:41.583630" elapsed="0.000526"/>
</kw>
<var name="${item}">vport1</var>
<status status="PASS" start="2026-10-06T01:21:41.583396" elapsed="0.000809"/>
</iter>
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.584976" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:41.584524" elapsed="0.000534"/>
</kw>
<var name="${item}">vport2</var>
<status status="PASS" start="2026-10-06T01:21:41.584306" elapsed="0.000801"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:21:41.583254" elapsed="0.001889"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:21:41.582943" elapsed="0.002315"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:41.551885" elapsed="0.033417"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.589036" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:41.588639" elapsed="0.000432"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:21:41.589130" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:21:41.589303" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:21:41.588179" elapsed="0.001157"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.590970" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.590641" elapsed="0.000388"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.591611" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.591290" elapsed="0.000379"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:41.604097" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0gusd5pkzmwglcb3p20r9r8j10.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:41.604198" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:21:41.604282" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:41.592088" elapsed="0.012218"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.591776" elapsed="0.012568"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.604517" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:41.604367" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.591751" elapsed="0.012858"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.606281" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.605831" elapsed="0.000510"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.605467" elapsed="0.000918"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.605443" elapsed="0.000974"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.607236" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.606856" elapsed="0.000438"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.606486" elapsed="0.000851"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.606466" elapsed="0.000902"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.608116" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:41.607617" elapsed="0.000534"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.608522" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:41.608240" elapsed="0.000374"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.609250" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:41.608883" elapsed="0.000400"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.608645" elapsed="0.000683"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.608217" elapsed="0.001139"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.610091" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:41.609603" elapsed="0.000523"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.610492" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:41.610213" elapsed="0.000350"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.611209" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:41.610847" elapsed="0.000395"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.610611" elapsed="0.000675"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.610190" elapsed="0.001123"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:41.611506" elapsed="0.000443"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:21:41.612522" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:41.612217" elapsed="0.000339"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:21:41.612803" elapsed="0.000295"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:21:41.604956" elapsed="0.008219"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:21:41.613374" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:21:41.613261" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.613238" elapsed="0.000243"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.613713" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:21:41.613805" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:21:41.614105" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:21:41.589787" elapsed="0.024353"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:21:41.614204" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:21:41.614374" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:21:41.587568" elapsed="0.026839"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.616070" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:41.615396" elapsed="0.000760"/>
</kw>
<var name="${item}">vport1</var>
<status status="PASS" start="2026-10-06T01:21:41.615177" elapsed="0.001031"/>
</iter>
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.616993" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:41.616534" elapsed="0.000541"/>
</kw>
<var name="${item}">vport2</var>
<status status="PASS" start="2026-10-06T01:21:41.616313" elapsed="0.000812"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:21:41.615035" elapsed="0.002128"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:21:41.614722" elapsed="0.002508"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:41.585414" elapsed="0.031858"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:41.520357" elapsed="0.096952"/>
</for>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:21:41.516050" elapsed="0.101323"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:21:41.509281" elapsed="0.108158"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.623559" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:41.623169" elapsed="0.000427"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.624031" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:41.623761" elapsed="0.000294"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:41.624096" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:21:41.624221" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:41.622610" elapsed="0.001634"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.626833" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:21:41.626532" elapsed="0.000327"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:21:41.626900" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:21:41.627020" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:21:41.626218" elapsed="0.000862"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.628233" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.628014" elapsed="0.000261"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.628708" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.628459" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:41.638367" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:41.638530" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '7267'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;4751e290-1144-4989-835c-4a6087613b63&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8361c3c3-061f-4f86-bc75-fbc902a226f8&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0efe4d72-9818-4679-b069-7c8c272a9d6e&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;92:e2:51:47:89:49&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;4&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vport2&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;e9169077-b950-412e-a8a5-9e33c5232ce7&lt;/port-uuid&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;7d7fd752-91eb-4f38-9440-d833bf2a2e77&lt;/interface-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vport2&lt;/name&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vx1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;a252ed10-41a0-46d2-aeee-4badacdd2e86&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vx1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;b9a66fcf-c42f-4608-b883-275d885d6def&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vport1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;f2ff6bd5-dd88-4b16-827b-08b4139a1962&lt;/port-uuid&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;a2c78ff3-2d9a-4374-8bc8-86ec6999b882&lt;/interface-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vport1&lt;/name&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:92:e2:51:47:89:49&lt;/datapath-id&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:21:41.638764" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:41.629034" elapsed="0.009755"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.628812" elapsed="0.010016"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.639002" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:41.638852" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.628795" elapsed="0.010286"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.640393" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;4751e290-1144-4989-835c-4a6087613b63&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8361c3c3-061f-4f86-bc75-fbc902a226f8&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0efe4d72-9818-4679-b069-7c8c272a9d6e&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;92:e2:51:47:89:49&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;4&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vport2&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;e9169077-b950-412e-a8a5-9e33c5232ce7&lt;/port-uuid&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;7d7fd752-91eb-4f38-9440-d833bf2a2e77&lt;/interface-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vport2&lt;/name&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vx1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;a252ed10-41a0-46d2-aeee-4badacdd2e86&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vx1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;b9a66fcf-c42f-4608-b883-275d885d6def&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vport1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;f2ff6bd5-dd88-4b16-827b-08b4139a1962&lt;/port-uuid&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;a2c78ff3-2d9a-4374-8bc8-86ec6999b882&lt;/interface-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vport1&lt;/name&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:92:e2:51:47:89:49&lt;/datapath-id&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.640015" elapsed="0.000527"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.639770" elapsed="0.000805"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.639752" elapsed="0.000862"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.641192" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.640924" elapsed="0.000310"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.640670" elapsed="0.000594"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.640654" elapsed="0.000632"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.641829" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:41.641453" elapsed="0.000402"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.642124" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:41.641918" elapsed="0.000259"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.642797" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:41.642352" elapsed="0.000470"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.642199" elapsed="0.000657"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.641901" elapsed="0.000976"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.643388" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:41.643047" elapsed="0.000366"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.643707" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:41.643477" elapsed="0.000285"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.644207" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:41.643941" elapsed="0.000291"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.643785" elapsed="0.000480"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.643460" elapsed="0.000825"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:41.644425" elapsed="0.000326"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:21:41.645133" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:41.644910" elapsed="0.000248"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:21:41.645308" elapsed="0.000207"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:21:41.639399" elapsed="0.006172"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:21:41.645748" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:41.645652" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.645631" elapsed="0.000196"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.645964" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:21:41.646026" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:21:41.646296" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1&lt;/node-id...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:21:41.627383" elapsed="0.018940"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:21:41.646369" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:21:41.646490" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1&lt;/node-id...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:21:41.625805" elapsed="0.020711"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.647531" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:41.647226" elapsed="0.000415"/>
</kw>
<var name="${item}">vport1</var>
<status status="PASS" start="2026-10-06T01:21:41.647068" elapsed="0.000623"/>
</iter>
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.648232" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:41.647931" elapsed="0.000389"/>
</kw>
<var name="${item}">vport2</var>
<status status="PASS" start="2026-10-06T01:21:41.647766" elapsed="0.000622"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:21:41.646967" elapsed="0.001449"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:21:41.646744" elapsed="0.001720"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:41.624397" elapsed="0.024099"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.651020" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:41.650753" elapsed="0.000293"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:21:41.651087" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:21:41.651209" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:21:41.650406" elapsed="0.000825"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.652384" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.652163" elapsed="0.000261"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.652863" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.652625" elapsed="0.000278"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:41.668952" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0196abtsaqd8g4mpvcap0t4mk0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:41.669107" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '3218'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"4751e290-1144-4989-835c-4a6087613b63","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"8361c3c3-061f-4f86-bc75-fbc902a226f8","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"0efe4d72-9818-4679-b069-7c8c272a9d6e","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"92:e2:51:47:89:49","ovsdb:ofport":65534,"ovsdb:ifindex":4},{"tp-id":"vport2","ovsdb:port-uuid":"e9169077-b950-412e-a8a5-9e33c5232ce7","ovsdb:interface-uuid":"7d7fd752-91eb-4f38-9440-d833bf2a2e77","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport2","ovsdb:ingress-policing-rate":0},{"tp-id":"vx1","ovsdb:port-uuid":"a252ed10-41a0-46d2-aeee-4badacdd2e86","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"b9a66fcf-c42f-4608-b883-275d885d6def","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"},{"tp-id":"vport1","ovsdb:port-uuid":"f2ff6bd5-dd88-4b16-827b-08b4139a1962","ovsdb:interface-uuid":"a2c78ff3-2d9a-4374-8bc8-86ec6999b882","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport1","ovsdb:ingress-policing-rate":0}],"ovsdb:datapath-id":"00:00:92:e2:51:47:89:49"},{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']"}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:21:41.669213" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:41.653190" elapsed="0.016047"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.652965" elapsed="0.016310"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.669448" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:41.669298" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.652948" elapsed="0.016577"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.670863" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"4751e290-1144-4989-835c-4a6087613b63","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"8361c3c3-061f-4f86-bc75-fbc902a226f8","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"0efe4d72-9818-4679-b069-7c8c272a9d6e","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"92:e2:51:47:89:49","ovsdb:ofport":65534,"ovsdb:ifindex":4},{"tp-id":"vport2","ovsdb:port-uuid":"e9169077-b950-412e-a8a5-9e33c5232ce7","ovsdb:interface-uuid":"7d7fd752-91eb-4f38-9440-d833bf2a2e77","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport2","ovsdb:ingress-policing-rate":0},{"tp-id":"vx1","ovsdb:port-uuid":"a252ed10-41a0-46d2-aeee-4badacdd2e86","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"b9a66fcf-c42f-4608-b883-275d885d6def","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"},{"tp-id":"vport1","ovsdb:port-uuid":"f2ff6bd5-dd88-4b16-827b-08b4139a1962","ovsdb:interface-uuid":"a2c78ff3-2d9a-4374-8bc8-86ec6999b882","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport1","ovsdb:ingress-policing-rate":0}],"ovsdb:datapath-id":"00:00:92:e2:51:47:89:49"},{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']"}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.670463" elapsed="0.000506"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.670222" elapsed="0.000781"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.670205" elapsed="0.000821"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.671769" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.671313" elapsed="0.000498"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.671077" elapsed="0.000766"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.671061" elapsed="0.000805"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.672380" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:41.672037" elapsed="0.000368"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.672705" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:41.672469" elapsed="0.000291"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.673203" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:41.672940" elapsed="0.000287"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.672783" elapsed="0.000478"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.672452" elapsed="0.000829"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.673822" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:41.673448" elapsed="0.000401"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.674113" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:41.673913" elapsed="0.000253"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.674615" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:41.674341" elapsed="0.000299"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.674188" elapsed="0.000499"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.673896" elapsed="0.000813"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:41.674849" elapsed="0.000291"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:21:41.675514" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:41.675297" elapsed="0.000241"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:21:41.675715" elapsed="0.000211"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:21:41.669887" elapsed="0.006095"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:21:41.676131" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:41.676049" elapsed="0.000137"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.676026" elapsed="0.000182"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.676347" elapsed="0.000019"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:21:41.676409" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:21:41.676699" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:21:41.651522" elapsed="0.025204"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:21:41.676772" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:21:41.676893" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:21:41.650000" elapsed="0.026918"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.677940" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:41.677613" elapsed="0.000402"/>
</kw>
<var name="${item}">vport1</var>
<status status="PASS" start="2026-10-06T01:21:41.677439" elapsed="0.000612"/>
</iter>
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.678578" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:41.678281" elapsed="0.000384"/>
</kw>
<var name="${item}">vport2</var>
<status status="PASS" start="2026-10-06T01:21:41.678124" elapsed="0.000621"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:21:41.677338" elapsed="0.001437"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:21:41.677118" elapsed="0.001705"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:41.648575" elapsed="0.030279"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.681367" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:41.681100" elapsed="0.000292"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:21:41.681434" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:21:41.681554" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:21:41.680782" elapsed="0.000795"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.682773" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.682516" elapsed="0.000298"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.683216" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.683000" elapsed="0.000256"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:41.704164" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0gusd5pkzmwglcb3p20r9r8j10.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:41.704320" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '3218'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"4751e290-1144-4989-835c-4a6087613b63","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"8361c3c3-061f-4f86-bc75-fbc902a226f8","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"0efe4d72-9818-4679-b069-7c8c272a9d6e","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"92:e2:51:47:89:49","ovsdb:ofport":65534,"ovsdb:ifindex":4},{"tp-id":"vport2","ovsdb:port-uuid":"e9169077-b950-412e-a8a5-9e33c5232ce7","ovsdb:interface-uuid":"7d7fd752-91eb-4f38-9440-d833bf2a2e77","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport2","ovsdb:ingress-policing-rate":0},{"tp-id":"vx1","ovsdb:port-uuid":"a252ed10-41a0-46d2-aeee-4badacdd2e86","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"b9a66fcf-c42f-4608-b883-275d885d6def","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"},{"tp-id":"vport1","ovsdb:port-uuid":"f2ff6bd5-dd88-4b16-827b-08b4139a1962","ovsdb:interface-uuid":"a2c78ff3-2d9a-4374-8bc8-86ec6999b882","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport1","ovsdb:ingress-policing-rate":0}],"ovsdb:datapath-id":"00:00:92:e2:51:47:89:49"},{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']"}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:21:41.704427" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:41.683538" elapsed="0.020913"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.683315" elapsed="0.021174"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.704698" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:41.704512" elapsed="0.000257"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.683298" elapsed="0.021491"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.706232" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"4751e290-1144-4989-835c-4a6087613b63","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"8361c3c3-061f-4f86-bc75-fbc902a226f8","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"0efe4d72-9818-4679-b069-7c8c272a9d6e","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"92:e2:51:47:89:49","ovsdb:ofport":65534,"ovsdb:ifindex":4},{"tp-id":"vport2","ovsdb:port-uuid":"e9169077-b950-412e-a8a5-9e33c5232ce7","ovsdb:interface-uuid":"7d7fd752-91eb-4f38-9440-d833bf2a2e77","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport2","ovsdb:ingress-policing-rate":0},{"tp-id":"vx1","ovsdb:port-uuid":"a252ed10-41a0-46d2-aeee-4badacdd2e86","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"b9a66fcf-c42f-4608-b883-275d885d6def","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"},{"tp-id":"vport1","ovsdb:port-uuid":"f2ff6bd5-dd88-4b16-827b-08b4139a1962","ovsdb:interface-uuid":"a2c78ff3-2d9a-4374-8bc8-86ec6999b882","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport1","ovsdb:ingress-policing-rate":0}],"ovsdb:datapath-id":"00:00:92:e2:51:47:89:49"},{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']"}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.705860" elapsed="0.000471"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.705578" elapsed="0.000786"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.705423" elapsed="0.000964"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.706980" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.706706" elapsed="0.000315"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.706440" elapsed="0.000614"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.706424" elapsed="0.000652"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.707618" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:41.707247" elapsed="0.000399"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.707933" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:41.707726" elapsed="0.000266"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.708431" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:41.708169" elapsed="0.000287"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.708015" elapsed="0.000474"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.707709" elapsed="0.000800"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.709048" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:41.708710" elapsed="0.000364"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.709340" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:41.709138" elapsed="0.000255"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.709871" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:41.709570" elapsed="0.000326"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:41.709415" elapsed="0.000515"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.709122" elapsed="0.000828"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:41.710089" elapsed="0.000291"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:21:41.710788" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:41.710536" elapsed="0.000277"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:21:41.710961" elapsed="0.000208"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:21:41.705107" elapsed="0.006118"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:21:41.711365" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:41.711286" elapsed="0.000134"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.711269" elapsed="0.000174"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.711591" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:21:41.711658" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:21:41.711942" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:21:41.681908" elapsed="0.030077"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:21:41.712042" elapsed="0.000031"/>
</return>
<msg time="2026-10-06T01:21:41.712175" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:21:41.680343" elapsed="0.031856"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.713285" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:41.712973" elapsed="0.000387"/>
</kw>
<var name="${item}">vport1</var>
<status status="PASS" start="2026-10-06T01:21:41.712810" elapsed="0.000586"/>
</iter>
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.713960" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:41.713641" elapsed="0.000393"/>
</kw>
<var name="${item}">vport2</var>
<status status="PASS" start="2026-10-06T01:21:41.713469" elapsed="0.000632"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:21:41.712704" elapsed="0.001426"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:21:41.712401" elapsed="0.001777"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:41.678934" elapsed="0.035275"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:41.624290" elapsed="0.089944"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:21:41.621932" elapsed="0.092347"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:21:41.617753" elapsed="0.096573"/>
</kw>
<doc>Add Tap Device vport1 and vport2 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:21:41.069101" elapsed="0.645280"/>
</kw>
<doc>Add tap devices to the bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="PASS" start="2026-10-06T01:21:40.613194" elapsed="1.101288"/>
</test>
<test id="s1-s1-s1-t8" name="Delete the Bridge Manually and Verify Before Fail" line="52">
<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-10-06T01:21:41.715956" elapsed="0.000199"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:41.715616" elapsed="0.000589"/>
</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-10-06T01:21:41.717109" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:41.717023" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.717006" elapsed="0.000165"/>
</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-10-06T01:21:41.719201" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:41.719117" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.719100" elapsed="0.000164"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.720171" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:41.719848" elapsed="0.000349"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.720630" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:41.720346" elapsed="0.000309"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:41.720710" elapsed="0.000028"/>
</return>
<msg time="2026-10-06T01:21:41.720837" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:41.719464" elapsed="0.001397"/>
</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-10-06T01:21:41.723242" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:41.723159" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.723141" elapsed="0.000164"/>
</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-10-06T01:21:41.724417" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:41.724334" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.724317" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:41.724883" 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-10-06T01:21:41.724638" elapsed="0.000270"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:41.725246" 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-10-06T01:21:41.725076" elapsed="0.000197"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:41.764342" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:41.725877" elapsed="0.038641"/>
</kw>
<msg time="2026-10-06T01:21:41.764718" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:41.764762" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:41.725429" elapsed="0.039366"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:41.855032" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:41.765384" elapsed="0.089881"/>
</kw>
<msg time="2026-10-06T01:21:41.855432" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:41.855476" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:41.764963" elapsed="0.090547"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.855833" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:41.855596" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.855565" elapsed="0.000366"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:41.856463" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:41.856112" elapsed="0.000432"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.856840" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:41.856622" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.856604" elapsed="0.000333"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:41.856971" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:41.859432" elapsed="0.000514"/>
</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-10-06T01:21:41.861169" elapsed="0.000634"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:41.863169" elapsed="0.000309"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:41.857780" elapsed="0.005766"/>
</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-10-06T01:21:41.857239" elapsed="0.006451"/>
</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="PASS" start="2026-10-06T01:21:41.724075" elapsed="0.139695"/>
</kw>
<msg time="2026-10-06T01:21:41.863851" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:41.863891" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:41.723453" elapsed="0.140471"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:41.864077" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:41.863993" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.863976" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:41.864476" elapsed="0.000024"/>
</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-10-06T01:21:41.864880" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:41.864947" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:41.722870" elapsed="0.142163"/>
</kw>
<msg time="2026-10-06T01:21:41.865115" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:41.865154" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:41.721179" elapsed="0.144007"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:41.865470" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:41.865253" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.865238" elapsed="0.000303"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:41.721041" elapsed="0.144521"/>
</iter>
<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-10-06T01:21:41.867986" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:41.867902" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.867885" elapsed="0.000194"/>
</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-10-06T01:21:41.869191" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:41.869107" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:41.869090" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:41.869636" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:41.869396" elapsed="0.000265"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:41.870006" 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-10-06T01:21:41.869839" elapsed="0.000191"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:41.914023" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:41.870612" elapsed="0.043597"/>
</kw>
<msg time="2026-10-06T01:21:41.914366" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:41.914408" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:41.870185" elapsed="0.044256"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:42.009472" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:41.915060" elapsed="0.094606"/>
</kw>
<msg time="2026-10-06T01:21:42.009849" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:42.009890" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:41.914617" elapsed="0.095306"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:42.010197" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:42.009993" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.009975" elapsed="0.000316"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.010844" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:42.010471" elapsed="0.000452"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:42.011197" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:42.010984" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.010968" elapsed="0.000321"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:42.011319" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:42.013769" elapsed="0.000475"/>
</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-10-06T01:21:42.015450" elapsed="0.000480"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:42.017290" elapsed="0.000470"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:42.012107" elapsed="0.005722"/>
</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-10-06T01:21:42.011591" elapsed="0.006353"/>
</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="PASS" start="2026-10-06T01:21:41.868847" elapsed="0.149173"/>
</kw>
<msg time="2026-10-06T01:21:42.018102" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:42.018141" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:41.868232" elapsed="0.149943"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:42.018330" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:42.018245" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.018227" elapsed="0.000211"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:42.018852" elapsed="0.000025"/>
</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-10-06T01:21:42.019150" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:42.019214" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:41.867577" elapsed="0.151722"/>
</kw>
<msg time="2026-10-06T01:21:42.019381" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:42.019420" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:41.865839" elapsed="0.153614"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:42.019766" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:42.019520" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.019504" elapsed="0.000335"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:41.865701" elapsed="0.154159"/>
</iter>
<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-10-06T01:21:42.022235" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:42.022151" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.022134" elapsed="0.000162"/>
</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-10-06T01:21:42.023393" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:42.023309" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.023292" elapsed="0.000169"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:42.023858" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:42.023616" elapsed="0.000267"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:42.024213" 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-10-06T01:21:42.024048" elapsed="0.000189"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:42.067588" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:42.024834" elapsed="0.042953"/>
</kw>
<msg time="2026-10-06T01:21:42.067945" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:42.067986" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:42.024390" elapsed="0.043630"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:42.166617" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:42.068620" elapsed="0.098206"/>
</kw>
<msg time="2026-10-06T01:21:42.166986" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:42.167028" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:42.068185" elapsed="0.098879"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:42.167341" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:42.167135" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.167116" elapsed="0.000322"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.167989" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:42.167632" elapsed="0.000447"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:42.168371" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:42.168141" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.168124" elapsed="0.000340"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:42.168494" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:42.170970" elapsed="0.000470"/>
</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-10-06T01:21:42.172695" elapsed="0.000450"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:42.174478" elapsed="0.000468"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:42.169290" elapsed="0.005724"/>
</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-10-06T01:21:42.168798" elapsed="0.006338"/>
</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="PASS" start="2026-10-06T01:21:42.023053" elapsed="0.152159"/>
</kw>
<msg time="2026-10-06T01:21:42.175294" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:42.175334" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:42.022447" elapsed="0.152923"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:42.175524" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:42.175439" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.175422" elapsed="0.000194"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:42.175974" elapsed="0.000024"/>
</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-10-06T01:21:42.176274" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:42.176338" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:42.021864" elapsed="0.154558"/>
</kw>
<msg time="2026-10-06T01:21:42.176504" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:42.176543" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:42.020106" elapsed="0.156485"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:42.176914" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:42.176660" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.176643" elapsed="0.000342"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:42.019969" elapsed="0.157037"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:41.720907" elapsed="0.456125"/>
</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-10-06T01:21:41.718821" elapsed="0.458261"/>
</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-10-06T01:21:41.716769" elapsed="0.460364"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:41.716349" elapsed="0.460826"/>
</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-10-06T01:21:41.715263" elapsed="0.461965"/>
</kw>
<kw name="Delete Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:42.180728" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:42.180460" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.180444" elapsed="0.000360"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:42.181120" 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-10-06T01:21:42.181211" 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-10-06T01:21:42.180996" elapsed="0.000271"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.181772" level="INFO">Attempting to execute command "sudo ovs-vsctl del-br br-s1" on remote system "10.30.170.234" 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-10-06T01:21:42.181455" elapsed="0.000360"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:42.182287" level="INFO">${conn_id} = 67</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-10-06T01:21:42.181990" elapsed="0.000321"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.183138" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:21:42.183207" 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-10-06T01:21:42.182890" elapsed="0.000338"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:42.183377" elapsed="0.000310"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:21:42.184441" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:21:42.548050" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:20:56 UTC 2026

  System load:  0.16               Processes:             110
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:21:41 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:21:42.184211" elapsed="0.363951"/>
</kw>
<msg time="2026-10-06T01:21:42.548241" 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-10-06T01:21:42.183850" elapsed="0.364472"/>
</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-10-06T01:21:42.182504" elapsed="0.365930"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:21:42.548966" level="INFO">Executing command 'sudo ovs-vsctl del-br br-s1'.</msg>
<msg time="2026-10-06T01:21:42.612161" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:21:42.612382" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:21:42.612468" level="INFO">${stderr} = </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-10-06T01:21:42.548753" elapsed="0.063762"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:42.612933" elapsed="0.000423"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.614377" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:42.613860" elapsed="0.000603"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:42.614868" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:42.614631" elapsed="0.000334"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.614565" elapsed="0.000448"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:21:42.615298" elapsed="0.000053"/>
</return>
<status status="PASS" start="2026-10-06T01:21:42.615119" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.615088" elapsed="0.000381"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:42.615536" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:42.617140" elapsed="0.000682"/>
</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-10-06T01:21:42.618229" elapsed="0.000313"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:42.618908" elapsed="0.000197"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:42.616218" elapsed="0.002987"/>
</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-10-06T01:21:42.180047" elapsed="0.439306"/>
</kw>
<msg time="2026-10-06T01:21:42.619457" 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-10-06T01:21:42.179509" elapsed="0.440046"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl del-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:21:42.179098" elapsed="0.440746"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.620979" level="INFO">${dictionary} = {'br-s1': '0'}</msg>
<var>${dictionary}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:21:42.620270" elapsed="0.000764"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.628358" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:42.627600" elapsed="0.000815"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.629400" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:42.628801" elapsed="0.000655"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:42.629544" elapsed="0.000083"/>
</return>
<msg time="2026-10-06T01:21:42.629886" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:42.626795" elapsed="0.003141"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.635883" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:21:42.635230" elapsed="0.000708"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:21:42.636027" elapsed="0.000057"/>
</return>
<msg time="2026-10-06T01:21:42.636296" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:21:42.634442" elapsed="0.001904"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.639017" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:42.638472" elapsed="0.000639"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.640067" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:42.639524" elapsed="0.000630"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:42.654302" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:42.654732" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3480'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:21:42.655099" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:42.643520" elapsed="0.011635"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:42.642995" elapsed="0.012247"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:42.655660" elapsed="0.000073"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:42.655296" elapsed="0.000524"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.640253" elapsed="0.015612"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.658885" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:42.657994" elapsed="0.001076"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:42.657415" elapsed="0.001727"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.657375" elapsed="0.001819"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.660492" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:42.659889" elapsed="0.000721"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:42.659308" elapsed="0.001399"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.659274" elapsed="0.001489"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.661972" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:42.661145" elapsed="0.000883"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:42.662726" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:42.662172" elapsed="0.000675"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.663884" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:42.663245" elapsed="0.000694"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:42.662896" elapsed="0.001115"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.662134" elapsed="0.001923"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.665248" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:42.664428" elapsed="0.000875"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:42.665952" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:42.665445" elapsed="0.000690"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.667176" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:42.666537" elapsed="0.000693"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:42.666187" elapsed="0.001115"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.665408" elapsed="0.001939"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:42.667708" elapsed="0.000670"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:21:42.669279" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:42.668776" elapsed="0.000557"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:21:42.669716" elapsed="0.000475"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:21:42.656624" elapsed="0.013689"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:21:42.670651" elapsed="0.000084"/>
</return>
<status status="PASS" start="2026-10-06T01:21:42.670451" elapsed="0.000355"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.670413" elapsed="0.000443"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:42.671166" elapsed="0.000044"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:21:42.671305" elapsed="0.000031"/>
</return>
<msg time="2026-10-06T01:21:42.671939" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:21:42.637065" elapsed="0.034937"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:21:42.672104" elapsed="0.000056"/>
</return>
<msg time="2026-10-06T01:21:42.672373" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:21:42.633472" elapsed="0.038958"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.674581" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:42.674121" elapsed="0.000579"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:21:42.673759" elapsed="0.000994"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:21:42.673471" elapsed="0.001322"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:21:42.672934" elapsed="0.001925"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:42.630304" elapsed="0.044597"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.678409" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:42.678035" elapsed="0.000409"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:21:42.678502" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:21:42.678710" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:21:42.677555" elapsed="0.001188"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.680349" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:42.680040" elapsed="0.000367"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.681219" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:42.680701" elapsed="0.000576"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:42.696241" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0196abtsaqd8g4mpvcap0t4mk0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:42.696410" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '1487'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:21:42.696610" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:42.681713" elapsed="0.014934"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:42.681364" elapsed="0.015364"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:42.696976" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:42.696763" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.681340" elapsed="0.015746"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.698901" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:42.698376" elapsed="0.000603"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:42.698049" elapsed="0.000974"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.698025" elapsed="0.001030"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.699865" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:42.699451" elapsed="0.000472"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:42.699125" elapsed="0.000842"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.699104" elapsed="0.000895"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.700750" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:42.700234" elapsed="0.000552"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:42.701158" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:42.700876" elapsed="0.000355"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.701883" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:42.701475" elapsed="0.000442"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:42.701262" elapsed="0.000701"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.700853" elapsed="0.001138"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.702729" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:42.702222" elapsed="0.000544"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:42.703134" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:42.702856" elapsed="0.000350"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.703859" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:42.703451" elapsed="0.000443"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:42.703237" elapsed="0.000703"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.702833" elapsed="0.001135"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:42.704163" elapsed="0.000435"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:21:42.705151" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:42.704838" elapsed="0.000347"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:21:42.705393" elapsed="0.000331"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:21:42.697536" elapsed="0.008268"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:21:42.706005" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:21:42.705891" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.705868" elapsed="0.000244"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:42.706352" elapsed="0.000029"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:21:42.706442" elapsed="0.000019"/>
</return>
<msg time="2026-10-06T01:21:42.706812" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:21:42.679151" elapsed="0.027698"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:21:42.706914" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:21:42.707086" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:21:42.676988" elapsed="0.030132"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.708557" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:42.708127" elapsed="0.000539"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:21:42.707900" elapsed="0.000837"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:21:42.707753" elapsed="0.001022"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:21:42.707400" elapsed="0.001442"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:42.675012" elapsed="0.033872"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.712582" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:42.712192" elapsed="0.000426"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:21:42.712696" elapsed="0.000039"/>
</return>
<msg time="2026-10-06T01:21:42.712870" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:21:42.711746" elapsed="0.001157"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.714505" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:42.714196" elapsed="0.000367"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.715168" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:42.714864" elapsed="0.000360"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:21:42.730083" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0gusd5pkzmwglcb3p20r9r8j10.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:21:42.730251" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '1487'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:21:42.730383" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:21:42.715642" elapsed="0.014775"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:42.715310" elapsed="0.015161"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:42.730755" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:42.730504" elapsed="0.000334"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.715286" elapsed="0.015581"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.732707" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:42.732190" elapsed="0.000637"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:42.731822" elapsed="0.001050"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.731798" elapsed="0.001106"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.733729" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:42.733311" elapsed="0.000477"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:42.732976" elapsed="0.000856"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.732954" elapsed="0.000910"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.734601" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:42.734101" elapsed="0.000537"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:42.735034" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:42.734749" elapsed="0.000359"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.735763" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:42.735354" elapsed="0.000444"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:42.735139" elapsed="0.000705"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.734725" elapsed="0.001148"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.736594" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:42.736107" elapsed="0.000523"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:42.737028" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:42.736740" elapsed="0.000361"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.737751" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:21:42.737349" elapsed="0.000437"/>
</kw>
<status status="PASS" start="2026-10-06T01:21:42.737133" elapsed="0.000698"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.736716" elapsed="0.001143"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:42.738054" elapsed="0.000409"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:21:42.739022" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:21:42.738715" elapsed="0.000340"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:21:42.739261" elapsed="0.000290"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:21:42.731312" elapsed="0.008333"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:21:42.739870" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-10-06T01:21:42.739754" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.739730" elapsed="0.000251"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:42.740177" elapsed="0.000027"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:21:42.740264" elapsed="0.000019"/>
</return>
<msg time="2026-10-06T01:21:42.740607" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:21:42.713312" elapsed="0.027332"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:21:42.740728" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:21:42.740900" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:21:42.711128" elapsed="0.029806"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.742587" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:21:42.742139" elapsed="0.000558"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:21:42.741914" elapsed="0.000837"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:21:42.741525" elapsed="0.001266"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:21:42.741214" elapsed="0.001645"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:42.708996" elapsed="0.033955"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:42.630046" elapsed="0.112947"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary {'br-s1': '0'}.</doc>
<status status="PASS" start="2026-10-06T01:21:42.625701" elapsed="0.117361"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:21:42.621461" elapsed="0.121667"/>
</kw>
<doc>Delete bridge br-s1 using OVS command and verify it gets applied in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:21:42.178643" elapsed="0.564563"/>
</kw>
<doc>Delete bridge with OVS command and verify it gets deleted from all instances.</doc>
<status status="PASS" start="2026-10-06T01:21:41.714727" elapsed="1.028625"/>
</test>
<test id="s1-s1-s1-t9" name="Create Bridge In Owner and Verify Before Fail" line="56">
<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-10-06T01:21:42.745412" elapsed="0.000324"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:42.745068" elapsed="0.000741"/>
</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-10-06T01:21:42.747121" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:42.746976" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.746952" elapsed="0.000258"/>
</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-10-06T01:21:42.749912" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:42.749795" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.749772" elapsed="0.000227"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.751283" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:42.750831" elapsed="0.000488"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.751947" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:42.751523" elapsed="0.000459"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:42.752038" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:21:42.752213" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:42.750286" elapsed="0.001959"/>
</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-10-06T01:21:42.755813" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:42.755692" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.755649" elapsed="0.000252"/>
</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-10-06T01:21:42.757479" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:42.757382" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.757362" elapsed="0.000180"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:42.757944" 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-10-06T01:21:42.757716" elapsed="0.000253"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:42.758296" 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-10-06T01:21:42.758127" elapsed="0.000193"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:42.797490" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:42.758927" elapsed="0.038780"/>
</kw>
<msg time="2026-10-06T01:21:42.797878" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:42.797920" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:42.758473" elapsed="0.039482"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:42.901259" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:42.798549" elapsed="0.102895"/>
</kw>
<msg time="2026-10-06T01:21:42.901654" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:42.901720" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:42.798122" elapsed="0.103635"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:42.902032" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:42.901830" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.901810" elapsed="0.000317"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:42.902653" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:42.902303" elapsed="0.000451"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:42.903014" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:42.902817" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.902800" elapsed="0.000307"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:42.903138" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:42.905699" elapsed="0.000479"/>
</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-10-06T01:21:42.907417" elapsed="0.000497"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:42.909284" elapsed="0.000325"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:42.903937" elapsed="0.005753"/>
</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-10-06T01:21:42.903405" elapsed="0.006407"/>
</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="PASS" start="2026-10-06T01:21:42.756969" elapsed="0.152918"/>
</kw>
<msg time="2026-10-06T01:21:42.909971" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:42.910013" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:42.756104" elapsed="0.153945"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:42.910202" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:42.910117" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.910100" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:42.910616" elapsed="0.000024"/>
</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-10-06T01:21:42.911006" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:42.911073" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:42.755253" elapsed="0.155905"/>
</kw>
<msg time="2026-10-06T01:21:42.911240" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:42.911279" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:42.752727" elapsed="0.158588"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:42.911612" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:42.911382" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.911366" elapsed="0.000333"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:42.752499" elapsed="0.159221"/>
</iter>
<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-10-06T01:21:42.914258" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:42.914174" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.914157" elapsed="0.000164"/>
</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-10-06T01:21:42.915474" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:42.915387" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:42.915370" elapsed="0.000167"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:42.915965" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:42.915730" elapsed="0.000263"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:42.916323" 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-10-06T01:21:42.916155" elapsed="0.000192"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:42.958217" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:42.916946" elapsed="0.041458"/>
</kw>
<msg time="2026-10-06T01:21:42.958575" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:42.958619" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:42.916500" elapsed="0.042155"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:43.049224" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:42.959259" elapsed="0.090147"/>
</kw>
<msg time="2026-10-06T01:21:43.049574" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:43.049617" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:42.958841" elapsed="0.090812"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:43.049950" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:43.049747" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.049728" elapsed="0.000316"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:43.050557" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:43.050221" elapsed="0.000434"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:43.050930" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:43.050734" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.050716" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:43.051054" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:43.053581" elapsed="0.000501"/>
</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-10-06T01:21:43.055308" elapsed="0.000489"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:43.057159" elapsed="0.000301"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:43.051845" elapsed="0.005680"/>
</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-10-06T01:21:43.051318" elapsed="0.006341"/>
</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="PASS" start="2026-10-06T01:21:42.915095" elapsed="0.142659"/>
</kw>
<msg time="2026-10-06T01:21:43.057837" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:43.057876" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:42.914466" elapsed="0.143446"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:43.058066" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:43.057982" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.057965" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:43.058460" elapsed="0.000024"/>
</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-10-06T01:21:43.058903" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:43.058970" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:42.913883" elapsed="0.145172"/>
</kw>
<msg time="2026-10-06T01:21:43.059140" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:43.059180" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:42.911966" elapsed="0.147250"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:43.059507" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:43.059284" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.059268" elapsed="0.000326"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:42.911830" elapsed="0.147785"/>
</iter>
<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-10-06T01:21:43.062148" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:43.062063" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.062046" elapsed="0.000166"/>
</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-10-06T01:21:43.063302" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:43.063218" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.063201" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:43.063763" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:43.063505" elapsed="0.000282"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:43.064120" 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-10-06T01:21:43.063947" elapsed="0.000197"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:43.111365" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:43.064884" elapsed="0.046657"/>
</kw>
<msg time="2026-10-06T01:21:43.111732" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:43.111774" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.064296" elapsed="0.047514"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:43.205340" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:43.112393" elapsed="0.093135"/>
</kw>
<msg time="2026-10-06T01:21:43.205730" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:43.205774" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.111973" elapsed="0.093838"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:43.206097" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:43.205883" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.205865" elapsed="0.000328"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:43.206750" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:43.206370" elapsed="0.000467"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:43.207103" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:43.206899" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.206882" elapsed="0.000314"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:43.207226" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:43.209758" elapsed="0.000481"/>
</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-10-06T01:21:43.211459" elapsed="0.000492"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:43.213132" elapsed="0.000310"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:43.208062" elapsed="0.005446"/>
</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-10-06T01:21:43.207524" elapsed="0.006116"/>
</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="PASS" start="2026-10-06T01:21:43.062962" elapsed="0.151016"/>
</kw>
<msg time="2026-10-06T01:21:43.214064" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:43.214104" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.062358" elapsed="0.151782"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:43.214295" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:43.214210" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.214192" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:43.214716" elapsed="0.000025"/>
</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-10-06T01:21:43.215021" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:43.215086" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:43.061771" elapsed="0.153400"/>
</kw>
<msg time="2026-10-06T01:21:43.215253" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:43.215293" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.059878" elapsed="0.155449"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:43.215626" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:43.215395" elapsed="0.000351"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.215379" elapsed="0.000392"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:43.059740" elapsed="0.156052"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:42.752309" elapsed="0.463510"/>
</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-10-06T01:21:42.749349" elapsed="0.466519"/>
</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-10-06T01:21:42.746560" elapsed="0.469358"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:42.746016" elapsed="0.469942"/>
</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-10-06T01:21:42.744545" elapsed="0.471460"/>
</kw>
<kw name="Create Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:21:43.220151" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Create bridge br01 in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:21:43.218897" elapsed="0.001289">Variable '${original_owner}' not found.</status>
</kw>
<doc>Create Bridge in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:21:42.743802" elapsed="0.476523">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t10" name="Create Port In Owner and Verify Before Fail" line="60">
<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-10-06T01:21:43.221750" elapsed="0.000200"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:43.221475" elapsed="0.000526"/>
</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-10-06T01:21:43.222898" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:43.222812" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.222795" elapsed="0.000164"/>
</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-10-06T01:21:43.224867" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:43.224752" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.224735" elapsed="0.000197"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:43.225845" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:43.225488" elapsed="0.000383"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:43.226300" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:43.226020" elapsed="0.000304"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:43.226365" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:21:43.226491" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:43.225134" elapsed="0.001380"/>
</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-10-06T01:21:43.229050" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:43.228965" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.228947" elapsed="0.000166"/>
</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-10-06T01:21:43.230208" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:43.230126" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.230109" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:43.230647" 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-10-06T01:21:43.230411" elapsed="0.000275"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:43.231020" 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-10-06T01:21:43.230849" elapsed="0.000195"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:43.272093" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:43.231614" elapsed="0.040653"/>
</kw>
<msg time="2026-10-06T01:21:43.272424" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:43.272465" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.231195" elapsed="0.041304"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:43.357003" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "a "n "[78Cd "[A[78C
 "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:43.273121" elapsed="0.084059"/>
</kw>
<msg time="2026-10-06T01:21:43.357337" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:43.357377" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.272699" elapsed="0.084711"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:43.357715" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:43.357478" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.357461" elapsed="0.000349"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:43.358322" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "a "n "[78Cd "[A[78C
 "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:43.357989" elapsed="0.000411"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:43.358667" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:43.358461" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.358444" elapsed="0.000334"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:43.358808" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:43.361235" elapsed="0.000519"/>
</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-10-06T01:21:43.363007" elapsed="0.000453"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:43.364921" elapsed="0.000322"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:43.359553" elapsed="0.005757"/>
</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-10-06T01:21:43.359069" elapsed="0.006363"/>
</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="PASS" start="2026-10-06T01:21:43.229869" elapsed="0.135639"/>
</kw>
<msg time="2026-10-06T01:21:43.365605" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:43.365645" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.229259" elapsed="0.136434"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:43.365851" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:43.365765" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.365747" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:43.366242" elapsed="0.000024"/>
</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-10-06T01:21:43.366538" elapsed="0.000034"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:43.366615" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:43.228658" elapsed="0.138132"/>
</kw>
<msg time="2026-10-06T01:21:43.366875" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:43.366915" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.226872" elapsed="0.140076"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:43.367246" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:43.367021" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.367005" elapsed="0.000313"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:43.226733" elapsed="0.140606"/>
</iter>
<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-10-06T01:21:43.369905" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:43.369820" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.369801" elapsed="0.000170"/>
</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-10-06T01:21:43.371068" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:43.370985" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.370968" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:43.371489" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:43.371270" elapsed="0.000244"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:43.371873" 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-10-06T01:21:43.371704" elapsed="0.000193"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:43.415631" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:43.372451" elapsed="0.043373"/>
</kw>
<msg time="2026-10-06T01:21:43.415980" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:43.416022" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.372047" elapsed="0.044008"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:43.524022" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "a "n "[78Cd "[A[78C
 "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:43.416651" elapsed="0.107581"/>
</kw>
<msg time="2026-10-06T01:21:43.524390" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:43.524431" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.416218" elapsed="0.108247"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:43.524776" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:43.524535" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.524517" elapsed="0.000355"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:43.525386" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "a "n "[78Cd "[A[78C
 "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:43.525052" elapsed="0.000411"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:43.525756" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:43.525524" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.525507" elapsed="0.000343"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:43.525880" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:43.528328" elapsed="0.000525"/>
</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-10-06T01:21:43.530076" elapsed="0.000452"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:43.531948" elapsed="0.000305"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:43.526642" elapsed="0.005676"/>
</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-10-06T01:21:43.526141" elapsed="0.006293"/>
</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="PASS" start="2026-10-06T01:21:43.370728" elapsed="0.161781"/>
</kw>
<msg time="2026-10-06T01:21:43.532607" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:43.532647" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.370120" elapsed="0.162577"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:43.532851" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-10-06T01:21:43.532767" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.532750" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:43.533244" elapsed="0.000023"/>
</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-10-06T01:21:43.533547" elapsed="0.000043"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:43.533633" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:43.369477" elapsed="0.164336"/>
</kw>
<msg time="2026-10-06T01:21:43.533899" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:43.533939" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.367604" elapsed="0.166373"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:43.534261" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:43.534047" elapsed="0.000263"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.534032" elapsed="0.000300"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:43.367447" elapsed="0.166906"/>
</iter>
<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-10-06T01:21:43.536886" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:43.536802" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.536784" elapsed="0.000164"/>
</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-10-06T01:21:43.538091" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:43.538007" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.537990" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:43.538516" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:43.538293" elapsed="0.000247"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:43.538900" 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-10-06T01:21:43.538731" elapsed="0.000193"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:43.583672" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:43.539486" elapsed="0.044385"/>
</kw>
<msg time="2026-10-06T01:21:43.584042" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:43.584085" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.539077" elapsed="0.045044"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:43.677044" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "a "n "[78Cd "[A[78C
 "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:43.584755" elapsed="0.092471"/>
</kw>
<msg time="2026-10-06T01:21:43.677386" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:43.677428" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.584289" elapsed="0.093174"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:43.677776" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:43.677533" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.677515" elapsed="0.000359"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:43.678398" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "a "n "[78Cd "[A[78C
 "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:43.678056" elapsed="0.000425"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:43.678773" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:43.678542" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.678525" elapsed="0.000342"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:43.678897" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:43.681360" elapsed="0.000508"/>
</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-10-06T01:21:43.683075" elapsed="0.000444"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:43.684733" elapsed="0.000308"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:43.679666" elapsed="0.005441"/>
</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-10-06T01:21:43.679160" elapsed="0.006061"/>
</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="PASS" start="2026-10-06T01:21:43.537750" elapsed="0.147546"/>
</kw>
<msg time="2026-10-06T01:21:43.685379" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:43.685419" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.537131" elapsed="0.148324"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:43.685623" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:43.685523" elapsed="0.000441"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.685506" elapsed="0.000489"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:43.686350" elapsed="0.000024"/>
</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-10-06T01:21:43.686689" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:43.686756" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:43.536466" elapsed="0.150376"/>
</kw>
<msg time="2026-10-06T01:21:43.686925" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:43.686969" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.534607" elapsed="0.152397"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:43.687286" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:43.687072" elapsed="0.000263"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.687056" elapsed="0.000301"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:43.534460" elapsed="0.152918"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:43.226577" elapsed="0.460827"/>
</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-10-06T01:21:43.224430" elapsed="0.463023"/>
</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-10-06T01:21:43.222527" elapsed="0.464976"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.222145" elapsed="0.465399"/>
</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-10-06T01:21:43.221138" elapsed="0.466504"/>
</kw>
<kw name="Create Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:21:43.691671" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Add Port vx2 to bridge br01 in controller ${controller_index} and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:21:43.690430" elapsed="0.001287">Variable '${original_owner}' not found.</status>
</kw>
<doc>Create Port in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:21:43.220616" elapsed="0.471227">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t11" name="Modify the destination IP of Port In Owner Before Fail" line="64">
<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-10-06T01:21:43.693215" elapsed="0.000198"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:43.692970" elapsed="0.000492"/>
</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-10-06T01:21:43.694359" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:43.694273" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.694256" elapsed="0.000166"/>
</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-10-06T01:21:43.696276" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:43.696193" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.696176" elapsed="0.000161"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:43.697237" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:43.696915" elapsed="0.000347"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:43.697705" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:43.697408" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:43.697770" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:21:43.697902" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:43.696534" elapsed="0.001391"/>
</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-10-06T01:21:43.701380" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:43.701296" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.701278" elapsed="0.000166"/>
</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-10-06T01:21:43.702579" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:43.702455" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.702439" elapsed="0.000206"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:43.703032" 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-10-06T01:21:43.702808" elapsed="0.000248"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:43.703381" 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-10-06T01:21:43.703215" elapsed="0.000189"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:43.741337" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:43.703998" elapsed="0.037515"/>
</kw>
<msg time="2026-10-06T01:21:43.741724" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:43.741767" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.703570" elapsed="0.038232"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:43.839335" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:43.742381" elapsed="0.097138"/>
</kw>
<msg time="2026-10-06T01:21:43.839712" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:43.839754" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.741966" elapsed="0.097823"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:43.840066" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:43.839860" elapsed="0.000277"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.839841" elapsed="0.000319"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:43.840702" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:43.840336" elapsed="0.000452"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:43.841044" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:43.840849" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.840833" elapsed="0.000304"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:43.841167" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:43.843643" elapsed="0.000485"/>
</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-10-06T01:21:43.845354" elapsed="0.000491"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:43.847052" elapsed="0.000308"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:43.841979" elapsed="0.005447"/>
</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-10-06T01:21:43.841429" elapsed="0.006114"/>
</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="PASS" start="2026-10-06T01:21:43.702198" elapsed="0.145437"/>
</kw>
<msg time="2026-10-06T01:21:43.847983" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:43.848023" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.701603" elapsed="0.146456"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:43.848212" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:43.848128" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.848111" elapsed="0.000177"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:43.848610" elapsed="0.000024"/>
</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-10-06T01:21:43.848962" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:43.849027" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:43.701005" elapsed="0.148106"/>
</kw>
<msg time="2026-10-06T01:21:43.849194" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:43.849233" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.698245" elapsed="0.151023"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:43.849562" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:43.849335" elapsed="0.000277"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.849319" elapsed="0.000316"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:43.698107" elapsed="0.151549"/>
</iter>
<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-10-06T01:21:43.852166" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:43.852082" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.852065" elapsed="0.000163"/>
</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-10-06T01:21:43.853304" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:43.853220" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:43.853204" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:43.853761" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:43.853506" elapsed="0.000280"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:43.854111" 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-10-06T01:21:43.853944" elapsed="0.000191"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:43.898229" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:43.854728" elapsed="0.043676"/>
</kw>
<msg time="2026-10-06T01:21:43.898589" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:43.898632" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.854286" elapsed="0.044380"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:44.000384" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:43.899274" elapsed="0.101306"/>
</kw>
<msg time="2026-10-06T01:21:44.000759" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:44.000800" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.898852" elapsed="0.101983"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:44.001112" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:44.000905" elapsed="0.000277"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.000887" elapsed="0.000318"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:44.001749" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:44.001382" elapsed="0.000452"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:44.002090" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:44.001895" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.001879" elapsed="0.000302"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:44.002244" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:44.004846" elapsed="0.000574"/>
</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-10-06T01:21:44.006628" elapsed="0.000467"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:44.008472" elapsed="0.000448"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:44.003040" elapsed="0.005946"/>
</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-10-06T01:21:44.002509" elapsed="0.006592"/>
</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="PASS" start="2026-10-06T01:21:43.852966" elapsed="0.156211"/>
</kw>
<msg time="2026-10-06T01:21:44.009259" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:44.009299" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.852373" elapsed="0.156962"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:44.009488" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:44.009403" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.009386" elapsed="0.000193"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:44.009902" elapsed="0.000024"/>
</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-10-06T01:21:44.010197" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:44.010260" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:43.851793" elapsed="0.158551"/>
</kw>
<msg time="2026-10-06T01:21:44.010426" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:44.010466" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.849944" elapsed="0.160557"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:44.010875" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:44.010582" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.010566" elapsed="0.000381"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:43.849807" elapsed="0.161161"/>
</iter>
<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-10-06T01:21:44.013425" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:44.013341" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.013323" elapsed="0.000165"/>
</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-10-06T01:21:44.014605" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:44.014503" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.014487" elapsed="0.000181"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:44.015056" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:44.014833" elapsed="0.000248"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:44.015406" 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-10-06T01:21:44.015240" elapsed="0.000190"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:44.062572" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:44.016028" elapsed="0.046739"/>
</kw>
<msg time="2026-10-06T01:21:44.062940" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:44.062981" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:44.015598" elapsed="0.047419"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:44.174403" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:44.063617" elapsed="0.110986"/>
</kw>
<msg time="2026-10-06T01:21:44.174786" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:44.174828" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:44.063180" elapsed="0.111684"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:44.175139" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:44.174934" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.174916" elapsed="0.000316"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:44.175777" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:44.175409" elapsed="0.000456"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:44.176123" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:44.175927" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.175911" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:44.176245" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:44.178726" elapsed="0.000474"/>
</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-10-06T01:21:44.180425" elapsed="0.000490"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:44.182280" elapsed="0.000320"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:44.177031" elapsed="0.005637"/>
</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-10-06T01:21:44.176506" elapsed="0.006297"/>
</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="PASS" start="2026-10-06T01:21:44.014248" elapsed="0.168631"/>
</kw>
<msg time="2026-10-06T01:21:44.182960" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:44.182999" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:44.013650" elapsed="0.169385"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:44.183188" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:44.183103" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.183086" elapsed="0.000177"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:44.183587" elapsed="0.000024"/>
</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-10-06T01:21:44.183972" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:44.184037" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:44.013051" elapsed="0.171071"/>
</kw>
<msg time="2026-10-06T01:21:44.184206" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:44.184245" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:44.011211" elapsed="0.173069"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:44.184577" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:44.184348" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.184332" elapsed="0.000318"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:44.011076" elapsed="0.173640"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:43.697971" elapsed="0.486775"/>
</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-10-06T01:21:43.695903" elapsed="0.488893"/>
</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-10-06T01:21:43.694023" elapsed="0.490822"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:43.693620" elapsed="0.491264"/>
</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-10-06T01:21:43.692618" elapsed="0.492312"/>
</kw>
<kw name="Modify the destination IP of Sample Port" owner="ClusterOvsdb">
<msg time="2026-10-06T01:21:44.187841" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Modify the dst ip of port vx2 in bridge br01 in controller ${controller_index}.</doc>
<status status="FAIL" start="2026-10-06T01:21:44.186585" elapsed="0.001290">Variable '${original_owner}' not found.</status>
</kw>
<doc>Modify the dst ip of existing port in Owner.</doc>
<status status="FAIL" start="2026-10-06T01:21:43.692111" elapsed="0.495886">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t12" name="Verify Port Is Modified Before Fail" line="68">
<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-10-06T01:21:44.189319" elapsed="0.000196"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:44.189077" elapsed="0.000503"/>
</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-10-06T01:21:44.190456" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:44.190371" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.190354" elapsed="0.000164"/>
</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-10-06T01:21:44.192374" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:44.192293" elapsed="0.000122"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.192276" elapsed="0.000160"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:44.193335" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:44.193013" elapsed="0.000347"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:44.193811" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:44.193509" elapsed="0.000326"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:44.193876" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:21:44.194001" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:44.192646" elapsed="0.001377"/>
</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-10-06T01:21:44.196498" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:44.196414" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.196397" elapsed="0.000178"/>
</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-10-06T01:21:44.197663" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:44.197579" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.197561" elapsed="0.000189"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:44.198114" 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-10-06T01:21:44.197892" elapsed="0.000247"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:44.198464" 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-10-06T01:21:44.198298" elapsed="0.000190"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:44.236626" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:44.199085" elapsed="0.037736"/>
</kw>
<msg time="2026-10-06T01:21:44.236980" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:44.237024" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:44.198654" elapsed="0.038405"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:44.321090" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CB
 "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:44.237658" elapsed="0.083642"/>
</kw>
<msg time="2026-10-06T01:21:44.321459" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:44.321501" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:44.237222" elapsed="0.084315"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:44.321869" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:44.321622" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.321603" elapsed="0.000361"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:44.322475" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CB
 "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:44.322143" elapsed="0.000426"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:44.322849" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:44.322631" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.322615" elapsed="0.000327"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:44.322973" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:44.325418" elapsed="0.000514"/>
</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-10-06T01:21:44.327169" elapsed="0.000468"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:44.329042" elapsed="0.000308"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:44.323767" elapsed="0.005649"/>
</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-10-06T01:21:44.323241" elapsed="0.006291"/>
</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="PASS" start="2026-10-06T01:21:44.197311" elapsed="0.132317"/>
</kw>
<msg time="2026-10-06T01:21:44.329726" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:44.329766" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:44.196737" elapsed="0.133064"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:44.329955" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:44.329871" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.329853" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:44.330340" elapsed="0.000022"/>
</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-10-06T01:21:44.330650" elapsed="0.000111"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:44.330807" 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="PASS" start="2026-10-06T01:21:44.196124" elapsed="0.134769"/>
</kw>
<msg time="2026-10-06T01:21:44.330976" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:44.331015" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:44.194340" elapsed="0.136710"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:44.331331" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:44.331117" elapsed="0.000262"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.331102" elapsed="0.000300"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:44.194203" elapsed="0.137219"/>
</iter>
<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-10-06T01:21:44.333939" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:44.333854" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.333837" elapsed="0.000164"/>
</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-10-06T01:21:44.335132" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:44.335048" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.335032" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:44.335570" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:44.335337" elapsed="0.000259"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:44.335942" 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-10-06T01:21:44.335773" elapsed="0.000192"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:44.379086" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:44.336531" elapsed="0.042731"/>
</kw>
<msg time="2026-10-06T01:21:44.379440" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:44.379491" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:44.336118" elapsed="0.043409"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:44.462301" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CB
 "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:44.380145" elapsed="0.082330"/>
</kw>
<msg time="2026-10-06T01:21:44.462645" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:44.462709" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:44.379723" elapsed="0.083023"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:44.463017" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:44.462817" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.462798" elapsed="0.000313"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:44.463633" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CB
 "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:44.463287" elapsed="0.000441"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:44.463986" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:44.463791" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.463774" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:44.464109" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:44.466626" elapsed="0.000494"/>
</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-10-06T01:21:44.468356" elapsed="0.000488"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:44.470219" elapsed="0.000306"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:44.464952" elapsed="0.005653"/>
</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-10-06T01:21:44.464369" elapsed="0.006371"/>
</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="PASS" start="2026-10-06T01:21:44.334793" elapsed="0.136023"/>
</kw>
<msg time="2026-10-06T01:21:44.470897" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:44.470936" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:44.334179" elapsed="0.136792"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:44.471125" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:44.471041" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.471023" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:44.471507" elapsed="0.000068"/>
</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-10-06T01:21:44.471971" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:44.472039" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:44.333529" elapsed="0.138596"/>
</kw>
<msg time="2026-10-06T01:21:44.472209" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:44.472249" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:44.331693" elapsed="0.140591"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:44.472582" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:44.472352" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.472336" elapsed="0.000318"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:44.331528" elapsed="0.141161"/>
</iter>
<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-10-06T01:21:44.475264" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:44.475180" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.475162" elapsed="0.000165"/>
</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-10-06T01:21:44.476422" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:44.476340" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.476323" elapsed="0.000161"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:44.476885" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:44.476640" elapsed="0.000269"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:44.477241" 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-10-06T01:21:44.477074" elapsed="0.000191"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:44.523305" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:44.477866" elapsed="0.045615"/>
</kw>
<msg time="2026-10-06T01:21:44.523716" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:44.523759" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:44.477417" elapsed="0.046377"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:44.608080" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CB
 "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:44.524488" elapsed="0.083766"/>
</kw>
<msg time="2026-10-06T01:21:44.608410" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:44.608451" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:44.523958" elapsed="0.084528"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:44.608799" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:44.608572" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.608553" elapsed="0.000341"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:44.609408" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CB
 "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:44.609074" elapsed="0.000414"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:44.609823" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:44.609607" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.609532" elapsed="0.000420"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:44.609984" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:44.612418" elapsed="0.000509"/>
</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-10-06T01:21:44.614137" elapsed="0.000460"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:44.615983" elapsed="0.000302"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:44.610789" elapsed="0.005561"/>
</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-10-06T01:21:44.610250" elapsed="0.006216"/>
</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="PASS" start="2026-10-06T01:21:44.476084" elapsed="0.140472"/>
</kw>
<msg time="2026-10-06T01:21:44.616640" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:44.616695" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:44.475474" elapsed="0.141259"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:44.616887" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:44.616803" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.616786" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:44.617277" elapsed="0.000024"/>
</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-10-06T01:21:44.617595" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:44.617660" elapsed="0.000057"/>
</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="PASS" start="2026-10-06T01:21:44.474890" elapsed="0.142902"/>
</kw>
<msg time="2026-10-06T01:21:44.617876" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:44.617916" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:44.472935" elapsed="0.145016"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:44.618236" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:44.618019" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:44.618002" elapsed="0.000305"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:44.472799" elapsed="0.145529"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:44.194068" elapsed="0.424286"/>
</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-10-06T01:21:44.192003" elapsed="0.426399"/>
</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-10-06T01:21:44.190121" elapsed="0.428330"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:44.189739" elapsed="0.428753"/>
</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-10-06T01:21:44.188743" elapsed="0.429815"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:21:44.620891" level="INFO">${port_dictionary} = {'br01': '6', 'vx2': '3', '10.0.0.19': '1'}</msg>
<var>${port_dictionary}</var>
<arg>br01=6</arg>
<arg>vx2=3</arg>
<arg>10.0.0.19=1</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:21:44.620527" elapsed="0.000389"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:21:44.625486" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:21:44.624143" elapsed="0.001390">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:21:45.634935" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:21:45.631835" elapsed="0.003184">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:21:46.644479" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:21:46.641573" elapsed="0.003006">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:21:47.653832" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:21:47.650920" elapsed="0.002994">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:21:48.663263" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:21:48.660310" elapsed="0.003034">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:21:49.673170" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:21:49.670192" elapsed="0.003063">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<msg time="2026-10-06T01:21:49.673477" level="FAIL">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</msg>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-10-06T01:21:44.621122" elapsed="5.052670">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:21:44.620162" elapsed="5.053892">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify port is modified in all instances.</doc>
<status status="FAIL" start="2026-10-06T01:21:44.188260" elapsed="5.486091">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s1-s1-t13" name="Delete Port In Owner Before Fail" line="72">
<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-10-06T01:21:49.677589" elapsed="0.000536"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:49.677012" elapsed="0.001228"/>
</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-10-06T01:21:49.680414" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:49.680194" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:49.680149" elapsed="0.000436"/>
</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-10-06T01:21:49.684823" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:49.684605" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:49.684568" elapsed="0.000393"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:49.687088" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:49.686283" elapsed="0.000864"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:49.688152" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:49.687504" elapsed="0.000702"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:49.688297" elapsed="0.000062"/>
</return>
<msg time="2026-10-06T01:21:49.688608" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:49.685411" elapsed="0.003248"/>
</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-10-06T01:21:49.694424" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:49.694226" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:49.694180" elapsed="0.000411"/>
</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-10-06T01:21:49.697268" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:49.697069" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:49.697031" elapsed="0.000378"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:49.698309" 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-10-06T01:21:49.697790" elapsed="0.000576"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:49.699198" 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-10-06T01:21:49.698801" elapsed="0.000453"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:49.738339" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:49.700644" elapsed="0.037962"/>
</kw>
<msg time="2026-10-06T01:21:49.738861" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:49.738918" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:49.699625" elapsed="0.039343"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:49.809912" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "[78Cf "[A[78Co
 "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:49.739848" elapsed="0.070237"/>
</kw>
<msg time="2026-10-06T01:21:49.810238" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:49.810279" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:49.739195" elapsed="0.071120"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:49.810602" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:49.810385" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:49.810367" elapsed="0.000352"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:49.811239" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "[78Cf "[A[78Co
 "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:49.810903" elapsed="0.000413"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:49.811586" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:49.811377" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:49.811361" elapsed="0.000337"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:49.811731" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:49.814216" elapsed="0.000507"/>
</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-10-06T01:21:49.815951" elapsed="0.000469"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:49.817630" elapsed="0.000538"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:49.812535" elapsed="0.005699"/>
</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-10-06T01:21:49.812017" elapsed="0.006332"/>
</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="PASS" start="2026-10-06T01:21:49.696421" elapsed="0.122004"/>
</kw>
<msg time="2026-10-06T01:21:49.818525" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:49.818565" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:49.695037" elapsed="0.123563"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:49.818770" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:49.818669" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:49.818652" elapsed="0.000201"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:49.819177" elapsed="0.000064"/>
</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-10-06T01:21:49.819533" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:49.819600" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:49.693519" elapsed="0.126255"/>
</kw>
<msg time="2026-10-06T01:21:49.819862" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:49.819902" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:49.689422" elapsed="0.130522"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:49.820242" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:49.820013" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:49.819997" elapsed="0.000318"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:49.689116" elapsed="0.131220"/>
</iter>
<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-10-06T01:21:49.822882" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:49.822797" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:49.822779" elapsed="0.000167"/>
</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-10-06T01:21:49.824048" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:49.823965" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:49.823948" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:49.824571" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:49.824253" elapsed="0.000343"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:49.824942" 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-10-06T01:21:49.824774" elapsed="0.000192"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:49.868546" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:49.825550" elapsed="0.043191"/>
</kw>
<msg time="2026-10-06T01:21:49.868899" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:49.868940" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:49.825118" elapsed="0.043857"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:49.958727" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "[78Cf "[A[78Co
 "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:49.869582" elapsed="0.089318"/>
</kw>
<msg time="2026-10-06T01:21:49.959055" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:49.959097" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:49.869143" elapsed="0.089989"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:49.959402" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:49.959201" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:49.959183" elapsed="0.000329"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:49.960049" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "[78Cf "[A[78Co
 "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:49.959713" elapsed="0.000419"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:49.960387" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:49.960192" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:49.960176" elapsed="0.000354"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:49.960562" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:49.963037" elapsed="0.000483"/>
</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-10-06T01:21:49.964787" elapsed="0.000447"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:49.966423" elapsed="0.000556"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:49.961340" elapsed="0.005706"/>
</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-10-06T01:21:49.960844" elapsed="0.006318"/>
</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="PASS" start="2026-10-06T01:21:49.823709" elapsed="0.143530"/>
</kw>
<msg time="2026-10-06T01:21:49.967321" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:49.967359" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:49.823094" elapsed="0.144301"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:49.967561" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:49.967476" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:49.967446" elapsed="0.000192"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:49.967966" elapsed="0.000024"/>
</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-10-06T01:21:49.968270" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:49.968334" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:49.822482" elapsed="0.145936"/>
</kw>
<msg time="2026-10-06T01:21:49.968516" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:49.968555" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:49.820597" elapsed="0.147993"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:49.968963" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:49.968658" elapsed="0.000354"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:49.968642" elapsed="0.000392"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:49.820446" elapsed="0.148609"/>
</iter>
<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-10-06T01:21:49.971540" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:49.971443" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:49.971426" elapsed="0.000177"/>
</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-10-06T01:21:49.972716" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:49.972609" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:49.972593" elapsed="0.000186"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:49.973140" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:49.972921" elapsed="0.000244"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:49.973500" 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-10-06T01:21:49.973321" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:50.018350" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:49.974108" elapsed="0.044432"/>
</kw>
<msg time="2026-10-06T01:21:50.018723" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:50.018766" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:49.973692" elapsed="0.045108"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:50.128231" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "[78Cf "[A[78Co
 "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:50.019430" elapsed="0.108980"/>
</kw>
<msg time="2026-10-06T01:21:50.128585" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:50.128627" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.019003" elapsed="0.109659"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.128977" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:50.128758" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.128738" elapsed="0.000335"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:50.129610" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "[78Cf "[A[78Co
 "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:50.129251" elapsed="0.000456"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.129966" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:50.129770" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.129753" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:50.130088" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:50.132563" elapsed="0.000498"/>
</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-10-06T01:21:50.134299" elapsed="0.000492"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:50.135997" elapsed="0.000306"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:50.130882" elapsed="0.005486"/>
</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-10-06T01:21:50.130353" elapsed="0.006150"/>
</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="PASS" start="2026-10-06T01:21:49.972342" elapsed="0.164240"/>
</kw>
<msg time="2026-10-06T01:21:50.136663" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:50.136896" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:49.971778" elapsed="0.165155"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:50.137088" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:50.137003" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.136985" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.137510" elapsed="0.000025"/>
</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-10-06T01:21:50.137823" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:50.137889" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:49.971154" elapsed="0.166818"/>
</kw>
<msg time="2026-10-06T01:21:50.138055" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:50.138099" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:49.969296" elapsed="0.168839"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.138425" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:50.138202" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.138186" elapsed="0.000327"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:49.969162" elapsed="0.169406"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:49.688801" elapsed="0.449796"/>
</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-10-06T01:21:49.683934" elapsed="0.454715"/>
</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-10-06T01:21:49.679573" elapsed="0.459247"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:49.678597" elapsed="0.460266"/>
</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-10-06T01:21:49.676177" elapsed="0.462735"/>
</kw>
<kw name="Delete Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:21:50.143914" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Delete port vx2 from bridge br01 in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:21:50.142644" elapsed="0.001305">Variable '${original_owner}' not found.</status>
</kw>
<doc>Delete port in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:21:49.675073" elapsed="0.469015">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t14" name="Delete Bridge In Owner And Verify Before Fail" line="76">
<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-10-06T01:21:50.145371" elapsed="0.000215"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:50.145129" elapsed="0.000506"/>
</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-10-06T01:21:50.146537" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:50.146435" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.146417" elapsed="0.000183"/>
</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-10-06T01:21:50.148439" elapsed="0.000027"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:50.148357" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.148341" elapsed="0.000177"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:50.149404" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:50.149081" elapsed="0.000349"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:50.149887" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:50.149599" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:50.149953" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:21:50.150078" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:50.148732" elapsed="0.001369"/>
</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-10-06T01:21:50.152609" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:50.152523" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.152503" elapsed="0.000183"/>
</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-10-06T01:21:50.153792" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:50.153706" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.153668" elapsed="0.000187"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:50.154218" 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-10-06T01:21:50.153996" elapsed="0.000246"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:50.154588" 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-10-06T01:21:50.154401" elapsed="0.000212"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:50.194566" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:50.155192" elapsed="0.039567"/>
</kw>
<msg time="2026-10-06T01:21:50.194941" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:50.194983" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.154782" elapsed="0.040236"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:50.283825" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78CA "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:50.195611" elapsed="0.088433"/>
</kw>
<msg time="2026-10-06T01:21:50.284202" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:50.284243" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.195179" elapsed="0.089101"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.284569" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:50.284350" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.284332" elapsed="0.000332"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:50.285203" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78CA "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:50.284865" elapsed="0.000419"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.285554" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:50.285344" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.285328" elapsed="0.000321"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:50.285698" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:50.288147" elapsed="0.000481"/>
</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-10-06T01:21:50.289853" elapsed="0.000442"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:50.291473" elapsed="0.000328"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:50.286467" elapsed="0.005400"/>
</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-10-06T01:21:50.285965" elapsed="0.006020"/>
</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="PASS" start="2026-10-06T01:21:50.153406" elapsed="0.138655"/>
</kw>
<msg time="2026-10-06T01:21:50.292143" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:50.292183" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.152835" elapsed="0.139382"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:50.292370" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:50.292285" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.292268" elapsed="0.000192"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:50.293061" elapsed="0.000025"/>
</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-10-06T01:21:50.293359" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:50.293423" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:50.152215" elapsed="0.141313"/>
</kw>
<msg time="2026-10-06T01:21:50.293612" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:50.293651" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.150425" elapsed="0.143276"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.293987" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:50.293771" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.293755" elapsed="0.000304"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:50.150289" elapsed="0.143791"/>
</iter>
<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-10-06T01:21:50.296562" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:50.296475" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.296444" elapsed="0.000210"/>
</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-10-06T01:21:50.297775" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:50.297668" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.297651" elapsed="0.000186"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:50.298202" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:50.297979" elapsed="0.000247"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:50.298566" 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-10-06T01:21:50.298385" elapsed="0.000205"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:50.343107" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:50.299166" elapsed="0.044114"/>
</kw>
<msg time="2026-10-06T01:21:50.343437" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:50.343497" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.298759" elapsed="0.044774"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:50.434902" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78CA "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:50.344135" elapsed="0.090944"/>
</kw>
<msg time="2026-10-06T01:21:50.435234" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:50.435276" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.343717" elapsed="0.091593"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.435595" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:50.435379" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.435361" elapsed="0.000351"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:50.436226" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78CA "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:50.435891" elapsed="0.000418"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.436587" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:50.436370" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.436353" elapsed="0.000344"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:50.436729" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:50.439153" elapsed="0.000479"/>
</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-10-06T01:21:50.440856" elapsed="0.000441"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:50.442472" elapsed="0.000557"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:50.437495" elapsed="0.005615"/>
</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-10-06T01:21:50.436990" elapsed="0.006243"/>
</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="PASS" start="2026-10-06T01:21:50.297395" elapsed="0.145915"/>
</kw>
<msg time="2026-10-06T01:21:50.443394" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:50.443435" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.296821" elapsed="0.146673"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:50.443655" elapsed="0.000041"/>
</return>
<status status="PASS" start="2026-10-06T01:21:50.443568" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.443549" elapsed="0.000235"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.444123" elapsed="0.000024"/>
</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-10-06T01:21:50.444423" elapsed="0.000037"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:50.444516" 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="PASS" start="2026-10-06T01:21:50.296171" elapsed="0.148436"/>
</kw>
<msg time="2026-10-06T01:21:50.444782" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:50.444826" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.294324" elapsed="0.150539"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.445151" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:50.444933" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.444916" elapsed="0.000307"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:50.294189" elapsed="0.151056"/>
</iter>
<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-10-06T01:21:50.447787" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:50.447697" elapsed="0.000132"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.447659" elapsed="0.000191"/>
</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-10-06T01:21:50.448978" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:50.448893" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.448875" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:50.449412" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:50.449188" elapsed="0.000248"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:50.449799" 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-10-06T01:21:50.449612" elapsed="0.000211"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:50.494012" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:50.450392" elapsed="0.043792"/>
</kw>
<msg time="2026-10-06T01:21:50.494340" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:50.494381" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.449977" elapsed="0.044439"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:50.595428" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78CA "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:50.495030" elapsed="0.100588"/>
</kw>
<msg time="2026-10-06T01:21:50.595802" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:50.595846" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.494591" elapsed="0.101290"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.596162" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:50.595953" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.595935" elapsed="0.000323"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:50.596811" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78CA "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:50.596435" elapsed="0.000461"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.597190" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:50.596958" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.596941" elapsed="0.000343"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:50.597315" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:50.599776" elapsed="0.000469"/>
</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-10-06T01:21:50.601458" elapsed="0.000470"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:50.603103" elapsed="0.000305"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:50.598110" elapsed="0.005383"/>
</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-10-06T01:21:50.597592" elapsed="0.006019"/>
</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="PASS" start="2026-10-06T01:21:50.448607" elapsed="0.155264"/>
</kw>
<msg time="2026-10-06T01:21:50.603958" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:50.603998" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.448008" elapsed="0.156026"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:50.604188" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:50.604103" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.604086" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.604591" elapsed="0.000025"/>
</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-10-06T01:21:50.604912" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:50.604977" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:50.447368" elapsed="0.157694"/>
</kw>
<msg time="2026-10-06T01:21:50.605145" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:50.605185" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.445503" elapsed="0.159718"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.605519" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:50.605289" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.605272" elapsed="0.000319"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:50.445354" elapsed="0.160258"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:50.150149" elapsed="0.455490"/>
</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-10-06T01:21:50.148068" elapsed="0.457746"/>
</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-10-06T01:21:50.146177" elapsed="0.459690"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.145795" elapsed="0.460111"/>
</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-10-06T01:21:50.144794" elapsed="0.461159"/>
</kw>
<kw name="Delete Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:21:50.609968" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Delete bridge br01 in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:21:50.608748" elapsed="0.001253">Variable '${original_owner}' not found.</status>
</kw>
<doc>Delete bridge in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:21:50.144281" elapsed="0.465849">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t15" name="Kill Owner Instance" line="80">
<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-10-06T01:21:50.611310" elapsed="0.000213"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:50.611068" elapsed="0.000504"/>
</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-10-06T01:21:50.612516" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:50.612413" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.612395" elapsed="0.000184"/>
</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-10-06T01:21:50.614430" elapsed="0.000026"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:50.614346" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.614329" elapsed="0.000178"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:50.615401" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:50.615079" elapsed="0.000348"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:50.615879" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:50.615590" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:50.615943" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:21:50.616068" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:50.614725" elapsed="0.001366"/>
</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-10-06T01:21:50.618741" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:50.618641" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.618623" elapsed="0.000182"/>
</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-10-06T01:21:50.619909" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:50.619825" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.619808" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:50.620337" 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-10-06T01:21:50.620115" elapsed="0.000246"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:50.620717" 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-10-06T01:21:50.620533" elapsed="0.000209"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:50.661910" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:50.621305" elapsed="0.040779"/>
</kw>
<msg time="2026-10-06T01:21:50.662241" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:50.662283" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.620895" elapsed="0.041424"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:50.719865" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "K "i "l "l "[C "O "w "n "e "r "[C "I "n "s "t "a "n "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:50.662937" elapsed="0.057096"/>
</kw>
<msg time="2026-10-06T01:21:50.720189" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:50.720230" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.662494" elapsed="0.057771"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.720549" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:50.720334" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.720316" elapsed="0.000327"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:50.721186" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "K "i "l "l "[C "O "w "n "e "r "[C "I "n "s "t "a "n "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:50.720848" elapsed="0.000411"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.721530" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:50.721321" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.721304" elapsed="0.000320"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:50.721704" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:50.724164" elapsed="0.000484"/>
</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-10-06T01:21:50.725900" elapsed="0.000452"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:50.727552" elapsed="0.000537"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:50.722479" elapsed="0.005676"/>
</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-10-06T01:21:50.721974" elapsed="0.006298"/>
</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="PASS" start="2026-10-06T01:21:50.619542" elapsed="0.108807"/>
</kw>
<msg time="2026-10-06T01:21:50.728431" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:50.728487" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.618954" elapsed="0.109569"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:50.728694" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:50.728593" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.728576" elapsed="0.000197"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:50.729087" elapsed="0.000023"/>
</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-10-06T01:21:50.729385" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:50.729465" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:50.618337" elapsed="0.111214"/>
</kw>
<msg time="2026-10-06T01:21:50.729634" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:50.729760" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.616413" elapsed="0.113386"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.730086" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:50.729868" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.729852" elapsed="0.000305"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:50.616276" elapsed="0.113901"/>
</iter>
<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-10-06T01:21:50.732703" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:50.732598" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.732580" elapsed="0.000187"/>
</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-10-06T01:21:50.733875" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:50.733791" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.733774" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:50.734302" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:50.734079" elapsed="0.000248"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:50.734666" 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-10-06T01:21:50.734498" elapsed="0.000208"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:50.777140" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:50.735268" elapsed="0.042043"/>
</kw>
<msg time="2026-10-06T01:21:50.777499" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:50.777544" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.734861" elapsed="0.042718"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:50.837860" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "K "i "l "l "[C "O "w "n "e "r "[C "I "n "s "t "a "n "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:50.778236" elapsed="0.059793"/>
</kw>
<msg time="2026-10-06T01:21:50.838191" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:50.838232" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.777810" elapsed="0.060457"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.838554" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:50.838337" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.838319" elapsed="0.000330"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:50.839201" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "K "i "l "l "[C "O "w "n "e "r "[C "I "n "s "t "a "n "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:50.838851" elapsed="0.000420"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.839543" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:50.839332" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.839316" elapsed="0.000320"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:50.839666" elapsed="0.000045"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:50.842162" elapsed="0.000484"/>
</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-10-06T01:21:50.843895" elapsed="0.000448"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:50.845539" elapsed="0.000538"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:50.840458" elapsed="0.005685"/>
</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-10-06T01:21:50.839952" elapsed="0.006307"/>
</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="PASS" start="2026-10-06T01:21:50.733510" elapsed="0.112824"/>
</kw>
<msg time="2026-10-06T01:21:50.846415" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:50.846468" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.732915" elapsed="0.113590"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:50.846659" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-10-06T01:21:50.846574" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.846557" elapsed="0.000197"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.847064" elapsed="0.000023"/>
</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-10-06T01:21:50.847366" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:50.847430" 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="PASS" start="2026-10-06T01:21:50.732293" elapsed="0.115236"/>
</kw>
<msg time="2026-10-06T01:21:50.847612" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:50.847651" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.730427" elapsed="0.117347"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.848065" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:50.847845" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.847829" elapsed="0.000306"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:50.730286" elapsed="0.117870"/>
</iter>
<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-10-06T01:21:50.850717" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:50.850610" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.850592" elapsed="0.000190"/>
</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-10-06T01:21:50.851879" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:50.851794" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.851778" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:50.852303" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:50.852082" elapsed="0.000246"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:50.852668" 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-10-06T01:21:50.852500" elapsed="0.000209"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:50.897244" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:50.853274" elapsed="0.044138"/>
</kw>
<msg time="2026-10-06T01:21:50.897597" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:50.897638" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.852864" elapsed="0.044808"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:50.956791" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "K "i "l "l "[C "O "w "n "e "r "[C "I "n "s "t "a "n "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:50.898278" elapsed="0.058677"/>
</kw>
<msg time="2026-10-06T01:21:50.957108" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:50.957150" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.897861" elapsed="0.059329"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.957469" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:50.957258" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.957240" elapsed="0.000322"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:50.958095" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "K "i "l "l "[C "O "w "n "e "r "[C "I "n "s "t "a "n "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:50.957764" elapsed="0.000405"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.958424" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:50.958229" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.958213" elapsed="0.000317"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:50.958560" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:50.961038" elapsed="0.000484"/>
</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-10-06T01:21:50.962752" elapsed="0.000441"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:50.964358" elapsed="0.000550"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:50.959335" elapsed="0.005643"/>
</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-10-06T01:21:50.958839" elapsed="0.006254"/>
</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="PASS" start="2026-10-06T01:21:50.851515" elapsed="0.113654"/>
</kw>
<msg time="2026-10-06T01:21:50.965250" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:50.965289" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.850928" elapsed="0.114396"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:50.965499" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:50.965392" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.965375" elapsed="0.000235"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.965938" elapsed="0.000023"/>
</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-10-06T01:21:50.966237" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:50.966301" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:50.850274" elapsed="0.116110"/>
</kw>
<msg time="2026-10-06T01:21:50.966480" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:50.966521" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.848398" elapsed="0.118158"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.966888" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:50.966624" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.966608" elapsed="0.000353"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:50.848263" elapsed="0.118719"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:50.616139" elapsed="0.350869"/>
</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-10-06T01:21:50.614055" elapsed="0.353003"/>
</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-10-06T01:21:50.612159" elapsed="0.354949"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.611734" elapsed="0.355416"/>
</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-10-06T01:21:50.610734" elapsed="0.356469"/>
</kw>
<kw name="Kill_Single_Member" owner="ClusterManagement">
<msg time="2026-10-06T01:21:50.968921" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Convenience keyword that kills the specified member of the cluster.
The KW will return a list of available members: ${updated index_list}=${original_index_list}-${member}</doc>
<status status="FAIL" start="2026-10-06T01:21:50.967425" elapsed="0.001531">Variable '${original_owner}' not found.</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_cluster_list}</arg>
<arg>${original_candidate_list}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:50.969151" elapsed="0.000020"/>
</kw>
<doc>Kill Owner Instance and verify it is dead</doc>
<status status="FAIL" start="2026-10-06T01:21:50.610314" elapsed="0.358974">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t16" name="Check Shards Status After Fail" line="85">
<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-10-06T01:21:50.970542" elapsed="0.000216"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:50.970287" elapsed="0.000522"/>
</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-10-06T01:21:50.971710" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:50.971605" elapsed="0.000147"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.971588" elapsed="0.000185"/>
</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-10-06T01:21:50.973628" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:50.973545" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.973529" elapsed="0.000177"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:50.974601" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:50.974267" elapsed="0.000360"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:50.975084" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:50.974790" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:50.975150" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:21:50.975276" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:50.973914" elapsed="0.001386"/>
</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-10-06T01:21:50.977864" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:50.977780" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.977762" 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-10-06T01:21:50.979067" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:50.978978" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:50.978961" elapsed="0.000168"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:50.979513" 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-10-06T01:21:50.979270" elapsed="0.000268"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:50.979890" 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-10-06T01:21:50.979722" elapsed="0.000193"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:51.018774" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:50.980497" elapsed="0.038452"/>
</kw>
<msg time="2026-10-06T01:21:51.019108" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:51.019150" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.980067" elapsed="0.039118"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:51.104901" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "A "f "t "[78Ce "[A[78Cr
 "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:51.019801" elapsed="0.085274"/>
</kw>
<msg time="2026-10-06T01:21:51.105235" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:51.105275" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.019347" elapsed="0.085962"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:51.105594" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:51.105379" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.105360" elapsed="0.000350"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:51.106225" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "A "f "t "[78Ce "[A[78Cr
 "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:51.105892" elapsed="0.000410"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:51.106578" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:51.106363" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.106346" elapsed="0.000324"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:51.106723" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:51.109165" elapsed="0.000484"/>
</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-10-06T01:21:51.110901" elapsed="0.000453"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:51.112549" elapsed="0.000330"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:51.107489" elapsed="0.005456"/>
</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-10-06T01:21:51.106986" elapsed="0.006077"/>
</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="PASS" start="2026-10-06T01:21:50.978717" elapsed="0.134421"/>
</kw>
<msg time="2026-10-06T01:21:51.113219" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:51.113259" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.978105" elapsed="0.135188"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:51.113457" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:51.113361" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.113344" elapsed="0.000228"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:51.114171" elapsed="0.000025"/>
</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-10-06T01:21:51.114496" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:51.114562" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:50.977467" elapsed="0.137180"/>
</kw>
<msg time="2026-10-06T01:21:51.114749" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:51.114789" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.975645" elapsed="0.139178"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:51.115107" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:51.114892" elapsed="0.000263"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.114876" elapsed="0.000301"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:50.975506" elapsed="0.139692"/>
</iter>
<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-10-06T01:21:51.117703" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:51.117603" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.117585" elapsed="0.000182"/>
</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-10-06T01:21:51.118875" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:51.118791" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.118774" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:51.119301" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:51.119078" elapsed="0.000248"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:51.119665" 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-10-06T01:21:51.119497" elapsed="0.000211"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:51.163004" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:51.120277" elapsed="0.042902"/>
</kw>
<msg time="2026-10-06T01:21:51.163352" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:51.163394" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.119864" elapsed="0.043565"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:51.239112" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "A "f "t "[78Ce "[A[78Cr
 "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:51.164054" elapsed="0.075231"/>
</kw>
<msg time="2026-10-06T01:21:51.239457" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:51.239500" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.163609" elapsed="0.075926"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:51.239825" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:51.239605" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.239587" elapsed="0.000334"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:51.240446" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "A "f "t "[78Ce "[A[78Cr
 "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:51.240097" elapsed="0.000427"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:51.240807" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:51.240586" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.240570" elapsed="0.000363"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:51.240964" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:51.243454" elapsed="0.000499"/>
</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-10-06T01:21:51.245152" elapsed="0.000461"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:51.247004" elapsed="0.000302"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:51.241799" elapsed="0.005572"/>
</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-10-06T01:21:51.241233" elapsed="0.006271"/>
</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="PASS" start="2026-10-06T01:21:51.118512" elapsed="0.129068"/>
</kw>
<msg time="2026-10-06T01:21:51.247661" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:51.247718" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.117913" elapsed="0.129840"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:51.247906" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:51.247822" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.247805" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:51.248295" elapsed="0.000023"/>
</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-10-06T01:21:51.248601" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:51.248666" elapsed="0.000105"/>
</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="PASS" start="2026-10-06T01:21:51.117299" elapsed="0.131548"/>
</kw>
<msg time="2026-10-06T01:21:51.248930" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:51.248969" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.115453" elapsed="0.133551"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:51.249285" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:51.249071" elapsed="0.000263"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.249055" elapsed="0.000300"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:51.115306" elapsed="0.134070"/>
</iter>
<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-10-06T01:21:51.251927" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:51.251844" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.251826" elapsed="0.000163"/>
</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-10-06T01:21:51.253082" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:51.252999" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.252982" elapsed="0.000167"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:51.253523" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:51.253288" elapsed="0.000259"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:51.253889" 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-10-06T01:21:51.253720" elapsed="0.000193"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:51.298168" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:51.254484" elapsed="0.043855"/>
</kw>
<msg time="2026-10-06T01:21:51.298507" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:51.298566" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.254064" elapsed="0.044566"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:51.372578" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "A "f "t "[78Ce "[A[78Cr
 "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:51.299240" elapsed="0.073526"/>
</kw>
<msg time="2026-10-06T01:21:51.372921" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:51.372962" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.298822" elapsed="0.074175"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:51.373266" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:51.373067" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.373049" elapsed="0.000310"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:51.373905" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "A "f "t "[78Ce "[A[78Cr
 "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:51.373554" elapsed="0.000423"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:51.374231" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:51.374038" elapsed="0.000262"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.374021" elapsed="0.000302"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:51.374352" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:51.376790" elapsed="0.000465"/>
</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-10-06T01:21:51.378470" elapsed="0.000460"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:51.380085" elapsed="0.000301"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:51.375135" elapsed="0.005332"/>
</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-10-06T01:21:51.374625" elapsed="0.005959"/>
</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="PASS" start="2026-10-06T01:21:51.252743" elapsed="0.127916"/>
</kw>
<msg time="2026-10-06T01:21:51.381006" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:51.381045" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.252135" elapsed="0.128944"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:51.381231" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:51.381148" elapsed="0.000137"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.381131" elapsed="0.000176"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:51.381627" elapsed="0.000024"/>
</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-10-06T01:21:51.381949" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:51.382014" elapsed="0.000018"/>
</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="PASS" start="2026-10-06T01:21:51.251515" elapsed="0.130589"/>
</kw>
<msg time="2026-10-06T01:21:51.382186" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:51.382224" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.249632" elapsed="0.132627"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:51.382560" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:51.382326" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.382311" elapsed="0.000357"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:51.249497" elapsed="0.133263"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:50.975348" elapsed="0.407438"/>
</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-10-06T01:21:50.973241" elapsed="0.409594"/>
</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-10-06T01:21:50.971336" elapsed="0.411549"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:50.970953" elapsed="0.411972"/>
</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-10-06T01:21:50.969950" elapsed="0.413022"/>
</kw>
<kw name="Check Ovsdb Shards Status After Cluster Event" owner="ClusterOvsdb">
<msg time="2026-10-06T01:21:51.385537" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>${new_cluster_list}</arg>
<doc>Check Shard Status after some cluster event.</doc>
<status status="FAIL" start="2026-10-06T01:21:51.383150" elapsed="0.002422">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Create original cluster list and check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:21:50.969483" elapsed="0.416224">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s1-s1-t17" name="Check Entity Owner Status And Find Owner and Candidate After Fail" line="89">
<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-10-06T01:21:51.386983" elapsed="0.000197"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:51.386739" elapsed="0.000492"/>
</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-10-06T01:21:51.388123" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:51.388040" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.388023" elapsed="0.000163"/>
</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-10-06T01:21:51.390036" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:51.389954" elapsed="0.000123"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.389937" elapsed="0.000161"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:51.391015" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:51.390661" elapsed="0.000381"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:51.391477" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:51.391190" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:51.391572" elapsed="0.000030"/>
</return>
<msg time="2026-10-06T01:21:51.391722" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:51.390296" elapsed="0.001449"/>
</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-10-06T01:21:51.394224" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:51.394140" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.394123" elapsed="0.000163"/>
</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-10-06T01:21:51.395370" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:51.395286" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.395269" elapsed="0.000180"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:51.395842" 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-10-06T01:21:51.395594" elapsed="0.000272"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:51.396191" 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-10-06T01:21:51.396026" elapsed="0.000189"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:51.433733" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:51.396810" elapsed="0.037097"/>
</kw>
<msg time="2026-10-06T01:21:51.434063" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:51.434104" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.396366" elapsed="0.037773"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:51.537812" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:51.434807" elapsed="0.103195"/>
</kw>
<msg time="2026-10-06T01:21:51.538160" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:51.538201" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.434340" elapsed="0.103897"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:51.538551" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:51.538331" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.538312" elapsed="0.000334"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:51.539178" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:51.538844" elapsed="0.000424"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:51.539545" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:51.539330" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.539313" elapsed="0.000326"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:51.539669" elapsed="0.000042"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:51.542141" elapsed="0.000488"/>
</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-10-06T01:21:51.543900" elapsed="0.000455"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:51.545627" elapsed="0.000539"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:51.540450" elapsed="0.005783"/>
</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-10-06T01:21:51.539951" elapsed="0.006399"/>
</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="PASS" start="2026-10-06T01:21:51.395029" elapsed="0.151410"/>
</kw>
<msg time="2026-10-06T01:21:51.546527" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:51.546567" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.394444" elapsed="0.152158"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:51.546773" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:51.546671" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.546653" elapsed="0.000197"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:51.547156" elapsed="0.000023"/>
</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-10-06T01:21:51.547460" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:51.547525" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:51.393851" elapsed="0.153759"/>
</kw>
<msg time="2026-10-06T01:21:51.547777" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:51.547818" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.392067" elapsed="0.155786"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:51.548136" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:51.547921" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.547905" elapsed="0.000336"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:51.391929" elapsed="0.156333"/>
</iter>
<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-10-06T01:21:51.550774" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:51.550667" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.550650" elapsed="0.000187"/>
</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-10-06T01:21:51.551930" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:51.551845" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.551829" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:51.552355" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:51.552134" elapsed="0.000246"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:51.552738" 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-10-06T01:21:51.552552" elapsed="0.000210"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:51.610634" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:51.553328" elapsed="0.057497"/>
</kw>
<msg time="2026-10-06T01:21:51.610999" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:51.611041" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.552916" elapsed="0.058160"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:51.725086" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:51.611696" elapsed="0.113573"/>
</kw>
<msg time="2026-10-06T01:21:51.725441" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:51.725484" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.611239" elapsed="0.114282"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:51.725821" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:51.725592" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.725574" elapsed="0.000342"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:51.726443" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:51.726092" elapsed="0.000443"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:51.726815" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:51.726597" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.726581" elapsed="0.000326"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:51.726937" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:51.729415" elapsed="0.000513"/>
</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-10-06T01:21:51.731169" elapsed="0.000468"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:51.733043" elapsed="0.000309"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:51.727732" elapsed="0.005687"/>
</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-10-06T01:21:51.727202" elapsed="0.006348"/>
</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="PASS" start="2026-10-06T01:21:51.551567" elapsed="0.182060"/>
</kw>
<msg time="2026-10-06T01:21:51.733760" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:51.733800" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.550982" elapsed="0.182854"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:51.733992" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:51.733907" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.733889" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:51.734377" elapsed="0.000023"/>
</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-10-06T01:21:51.734733" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:51.734801" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:51.550364" elapsed="0.184523"/>
</kw>
<msg time="2026-10-06T01:21:51.734970" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:51.735009" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.548519" elapsed="0.186525"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:51.735325" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:51.735112" elapsed="0.000262"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.735096" elapsed="0.000299"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:51.548371" elapsed="0.187046"/>
</iter>
<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-10-06T01:21:51.737985" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:51.737901" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.737883" elapsed="0.000164"/>
</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-10-06T01:21:51.739156" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:51.739073" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.739057" elapsed="0.000161"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:51.739598" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:51.739358" elapsed="0.000265"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:51.739968" 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-10-06T01:21:51.739799" elapsed="0.000192"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:51.780595" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:51.740565" elapsed="0.040233"/>
</kw>
<msg time="2026-10-06T01:21:51.780986" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:51.781028" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.740143" elapsed="0.040920"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:51.904905" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:51.781671" elapsed="0.123421"/>
</kw>
<msg time="2026-10-06T01:21:51.905250" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:51.905291" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.781228" elapsed="0.124098"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:51.905610" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:51.905395" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.905377" elapsed="0.000381"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:51.906286" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:51.905941" elapsed="0.000433"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:51.906649" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:51.906451" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.906433" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:51.906792" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:51.909249" elapsed="0.000507"/>
</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-10-06T01:21:51.910986" elapsed="0.000463"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:51.912632" elapsed="0.000532"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:51.907567" elapsed="0.005664"/>
</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-10-06T01:21:51.907059" elapsed="0.006289"/>
</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="PASS" start="2026-10-06T01:21:51.738817" elapsed="0.174622"/>
</kw>
<msg time="2026-10-06T01:21:51.913524" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:51.913563" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.738194" elapsed="0.175404"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:51.913770" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:51.913668" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.913651" elapsed="0.000196"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:51.914160" elapsed="0.000024"/>
</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-10-06T01:21:51.914474" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:51.914539" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:51.737589" elapsed="0.177034"/>
</kw>
<msg time="2026-10-06T01:21:51.914796" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:51.914837" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.735769" elapsed="0.179103"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:51.915155" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:51.914942" elapsed="0.000261"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.914925" elapsed="0.000300"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:51.735540" elapsed="0.179706"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:51.391793" elapsed="0.523478"/>
</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-10-06T01:21:51.389650" elapsed="0.525671"/>
</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-10-06T01:21:51.387789" elapsed="0.527581"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.387374" elapsed="0.528037"/>
</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-10-06T01:21:51.386373" elapsed="0.529099"/>
</kw>
<kw name="Get Ovsdb Entity Owner Status For One Device" owner="ClusterOvsdb">
<msg time="2026-10-06T01:21:51.919336" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<var>${new_owner}</var>
<var>${new_candidate_list}</var>
<arg>ovsdb://uuid/${ovsdb_uuid}</arg>
<arg>${original_candidate}</arg>
<arg>${new_cluster_list}</arg>
<doc>Check Entity Owner Status and identify owner and successors for an ovs device ${device}. Request is sent to controller ${controller_index}.</doc>
<status status="FAIL" start="2026-10-06T01:21:51.918118" elapsed="0.001252">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Get From List" owner="Collections">
<var>${new_candidate}</var>
<arg>${new_candidate_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:51.919595" elapsed="0.000021"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_owner}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:51.919810" elapsed="0.000020"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_candidate}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:51.920003" elapsed="0.000018"/>
</kw>
<doc>Check Entity Owner Status and identify owner and candidate.</doc>
<status status="FAIL" start="2026-10-06T01:21:51.385887" elapsed="0.534254">Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s1-s1-t18" name="Create Bridge Manually and Verify After Fail" line="99">
<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-10-06T01:21:51.921468" elapsed="0.000199"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:51.921209" elapsed="0.000525"/>
</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-10-06T01:21:51.922621" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:51.922535" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.922518" elapsed="0.000182"/>
</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-10-06T01:21:51.924558" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:51.924475" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.924458" elapsed="0.000162"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:51.925541" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:51.925206" elapsed="0.000360"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:51.926012" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:51.925741" elapsed="0.000295"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:51.926076" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:21:51.926201" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:51.924838" elapsed="0.001385"/>
</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-10-06T01:21:51.928747" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:51.928647" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.928629" elapsed="0.000181"/>
</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-10-06T01:21:51.929905" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:51.929822" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:51.929805" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:51.930330" 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-10-06T01:21:51.930108" elapsed="0.000246"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:51.930714" 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-10-06T01:21:51.930529" elapsed="0.000254"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:51.968847" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:51.931351" elapsed="0.037672"/>
</kw>
<msg time="2026-10-06T01:21:51.969206" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:51.969247" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.930941" elapsed="0.038341"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:52.049114" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:51.969920" elapsed="0.079374"/>
</kw>
<msg time="2026-10-06T01:21:52.049462" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:52.049505" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.969459" elapsed="0.080113"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:52.049877" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:52.049646" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.049627" elapsed="0.000347"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:52.050505" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:52.050153" elapsed="0.000434"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:52.050862" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:52.050649" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.050632" elapsed="0.000323"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:52.050986" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:52.053435" elapsed="0.000495"/>
</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-10-06T01:21:52.055158" elapsed="0.000469"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:52.056819" elapsed="0.000310"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:52.051774" elapsed="0.005420"/>
</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-10-06T01:21:52.051254" elapsed="0.006059"/>
</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="PASS" start="2026-10-06T01:21:51.929542" elapsed="0.127849"/>
</kw>
<msg time="2026-10-06T01:21:52.057487" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:52.057527" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.928960" elapsed="0.128603"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:52.057733" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:52.057633" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.057615" elapsed="0.000195"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:52.058122" elapsed="0.000023"/>
</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-10-06T01:21:52.058432" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:52.058497" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:51.928343" elapsed="0.130238"/>
</kw>
<msg time="2026-10-06T01:21:52.058664" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:52.058720" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.926560" elapsed="0.132197"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:52.059043" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:52.058826" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.058810" elapsed="0.000304"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:51.926406" elapsed="0.132729"/>
</iter>
<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-10-06T01:21:52.061666" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:52.061569" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.061551" elapsed="0.000205"/>
</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-10-06T01:21:52.062862" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:52.062780" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.062763" elapsed="0.000192"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:52.063332" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:52.063107" elapsed="0.000250"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:52.064015" 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-10-06T01:21:52.063534" elapsed="0.000507"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:52.107080" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:52.064622" elapsed="0.042630"/>
</kw>
<msg time="2026-10-06T01:21:52.107446" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:52.107490" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.064197" elapsed="0.043328"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:52.196216" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:52.108141" elapsed="0.088250"/>
</kw>
<msg time="2026-10-06T01:21:52.196560" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:52.196602" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.107712" elapsed="0.088925"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:52.196932" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:52.196729" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.196710" elapsed="0.000315"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:52.197554" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:52.197205" elapsed="0.000431"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:52.197912" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:52.197717" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.197699" elapsed="0.000304"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:52.198033" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:52.200459" elapsed="0.000491"/>
</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-10-06T01:21:52.202151" elapsed="0.000460"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:52.203997" elapsed="0.000320"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:52.198818" elapsed="0.005564"/>
</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-10-06T01:21:52.198294" elapsed="0.006222"/>
</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="PASS" start="2026-10-06T01:21:52.062492" elapsed="0.142100"/>
</kw>
<msg time="2026-10-06T01:21:52.204687" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:52.204730" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.061906" elapsed="0.142860"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:52.204920" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:52.204836" elapsed="0.000137"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.204818" elapsed="0.000177"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:52.205303" elapsed="0.000023"/>
</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-10-06T01:21:52.205658" elapsed="0.000068"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:52.205770" 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="PASS" start="2026-10-06T01:21:52.061256" elapsed="0.144601"/>
</kw>
<msg time="2026-10-06T01:21:52.205939" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:52.205978" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.059380" elapsed="0.146633"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:52.206297" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:52.206082" elapsed="0.000263"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.206065" elapsed="0.000303"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:52.059243" elapsed="0.147146"/>
</iter>
<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-10-06T01:21:52.208960" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:52.208876" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.208858" elapsed="0.000164"/>
</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-10-06T01:21:52.210122" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:52.210039" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.210022" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:52.210613" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:52.210325" elapsed="0.000314"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:52.210988" 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-10-06T01:21:52.210817" elapsed="0.000195"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:52.259171" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:52.211591" elapsed="0.047754"/>
</kw>
<msg time="2026-10-06T01:21:52.259527" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:52.259568" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.211164" elapsed="0.048440"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:52.345765" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:52.260210" elapsed="0.085738"/>
</kw>
<msg time="2026-10-06T01:21:52.346108" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:52.346150" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.259790" elapsed="0.086395"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:52.346476" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:52.346257" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.346239" elapsed="0.000335"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:52.347121" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:52.346777" elapsed="0.000428"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:52.347481" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:52.347268" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.347251" elapsed="0.000326"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:52.347608" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:52.350147" elapsed="0.000498"/>
</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-10-06T01:21:52.351905" elapsed="0.000458"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:52.353571" elapsed="0.000591"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:52.348441" elapsed="0.005790"/>
</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-10-06T01:21:52.347924" elapsed="0.006425"/>
</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="PASS" start="2026-10-06T01:21:52.209783" elapsed="0.144659"/>
</kw>
<msg time="2026-10-06T01:21:52.354528" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:52.354568" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.209173" elapsed="0.145430"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:52.354781" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:52.354691" elapsed="0.000147"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.354656" elapsed="0.000205"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:52.355175" elapsed="0.000025"/>
</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-10-06T01:21:52.355494" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:52.355560" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:52.208564" elapsed="0.147082"/>
</kw>
<msg time="2026-10-06T01:21:52.355821" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:52.355861" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.206646" elapsed="0.149252"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:52.356184" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:52.355969" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.355952" elapsed="0.000303"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:52.206511" elapsed="0.149764"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:51.926269" elapsed="0.430032"/>
</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-10-06T01:21:51.924172" elapsed="0.432178"/>
</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-10-06T01:21:51.922264" elapsed="0.434135"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:51.921879" elapsed="0.434582"/>
</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-10-06T01:21:51.920874" elapsed="0.435635"/>
</kw>
<kw name="Create Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:21:52.359357" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Create bridge br-s1 using OVS command and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:21:52.358079" elapsed="0.001313">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Create bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:21:51.920325" elapsed="0.439207">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s1-s1-t19" name="Add Port Manually and Verify After Fail" line="103">
<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-10-06T01:21:52.360883" elapsed="0.000198"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:52.360622" elapsed="0.000509"/>
</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-10-06T01:21:52.362074" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:52.361988" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.361971" elapsed="0.000165"/>
</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-10-06T01:21:52.364033" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:52.363948" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.363926" elapsed="0.000168"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:52.364999" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:52.364659" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:52.365454" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:52.365172" elapsed="0.000308"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:52.365521" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:21:52.365645" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:52.364295" elapsed="0.001373"/>
</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-10-06T01:21:52.368158" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:52.368074" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.368057" elapsed="0.000166"/>
</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-10-06T01:21:52.369327" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:52.369244" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.369227" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:52.369794" 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-10-06T01:21:52.369548" elapsed="0.000271"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:52.370147" 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-10-06T01:21:52.369979" elapsed="0.000192"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:52.408145" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:52.370766" elapsed="0.037554"/>
</kw>
<msg time="2026-10-06T01:21:52.408597" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:52.408639" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.370323" elapsed="0.038371"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:52.501113" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:52.409275" elapsed="0.092015"/>
</kw>
<msg time="2026-10-06T01:21:52.501466" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:52.501508" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.408860" elapsed="0.092683"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:52.501848" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:52.501612" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.501594" elapsed="0.000345"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:52.502469" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:52.502118" elapsed="0.000435"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:52.502827" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:52.502614" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.502598" elapsed="0.000322"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:52.502950" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:52.505397" elapsed="0.000551"/>
</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-10-06T01:21:52.507172" elapsed="0.000466"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:52.509045" elapsed="0.000308"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:52.503738" elapsed="0.005699"/>
</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-10-06T01:21:52.503209" elapsed="0.006347"/>
</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="PASS" start="2026-10-06T01:21:52.368988" elapsed="0.140644"/>
</kw>
<msg time="2026-10-06T01:21:52.509731" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:52.509771" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.368369" elapsed="0.141438"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:52.509960" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:52.509876" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.509859" elapsed="0.000177"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:52.510340" elapsed="0.000023"/>
</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-10-06T01:21:52.510656" elapsed="0.000115"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:52.510816" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:52.367788" elapsed="0.143113"/>
</kw>
<msg time="2026-10-06T01:21:52.510985" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:52.511023" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.366005" elapsed="0.145053"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:52.511351" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:52.511125" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.511109" elapsed="0.000333"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:52.365869" elapsed="0.145595"/>
</iter>
<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-10-06T01:21:52.514049" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:52.513967" elapsed="0.000123"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.513949" elapsed="0.000162"/>
</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-10-06T01:21:52.515208" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:52.515125" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.515108" elapsed="0.000161"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:52.515653" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:52.515427" elapsed="0.000267"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:52.516025" 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-10-06T01:21:52.515856" elapsed="0.000192"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:52.565621" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:52.516629" elapsed="0.049188"/>
</kw>
<msg time="2026-10-06T01:21:52.565972" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:52.566013" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.516199" elapsed="0.049849"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:52.665457" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:52.566670" elapsed="0.098994"/>
</kw>
<msg time="2026-10-06T01:21:52.665846" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:52.665888" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.566230" elapsed="0.099694"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:52.666200" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:52.665994" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.665976" elapsed="0.000319"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:52.666845" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:52.666490" elapsed="0.000436"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:52.667184" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:52.666988" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.666971" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:52.667307" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:52.669802" elapsed="0.000471"/>
</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-10-06T01:21:52.671514" elapsed="0.000474"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:52.673350" elapsed="0.000338"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:52.668103" elapsed="0.005655"/>
</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-10-06T01:21:52.667589" elapsed="0.006285"/>
</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="PASS" start="2026-10-06T01:21:52.514867" elapsed="0.159083"/>
</kw>
<msg time="2026-10-06T01:21:52.674032" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:52.674071" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.514256" elapsed="0.159850"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:52.674259" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:52.674175" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.674157" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:52.674666" elapsed="0.000107"/>
</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-10-06T01:21:52.675058" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:52.675128" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:52.513643" elapsed="0.161628"/>
</kw>
<msg time="2026-10-06T01:21:52.675356" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:52.675395" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.511723" elapsed="0.163719"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:52.675794" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:52.675511" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.675495" elapsed="0.000374"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:52.511571" elapsed="0.164325"/>
</iter>
<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-10-06T01:21:52.678567" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:52.678482" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.678464" elapsed="0.000165"/>
</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-10-06T01:21:52.679832" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:52.679747" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.679729" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:52.680261" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:52.680036" elapsed="0.000250"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:52.680631" 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-10-06T01:21:52.680462" elapsed="0.000193"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:52.728394" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:52.681290" elapsed="0.047912"/>
</kw>
<msg time="2026-10-06T01:21:52.729512" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:52.729558" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.680872" elapsed="0.048722"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:52.822772" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:52.730458" elapsed="0.092517"/>
</kw>
<msg time="2026-10-06T01:21:52.823148" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:52.823190" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.729878" elapsed="0.093347"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:52.823591" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:52.823322" elapsed="0.000342"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.823293" elapsed="0.000424"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:52.824286" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:52.823911" elapsed="0.000462"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:52.824649" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:52.824449" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.824431" elapsed="0.000327"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:52.824794" elapsed="0.000039"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:52.827498" elapsed="0.000514"/>
</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-10-06T01:21:52.829273" elapsed="0.000523"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:52.831197" elapsed="0.000328"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:52.825719" elapsed="0.005874"/>
</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-10-06T01:21:52.825125" elapsed="0.006604"/>
</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="PASS" start="2026-10-06T01:21:52.679465" elapsed="0.152344"/>
</kw>
<msg time="2026-10-06T01:21:52.831898" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:52.831939" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.678828" elapsed="0.153146"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:52.832134" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:52.832045" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.832027" elapsed="0.000186"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:52.832568" elapsed="0.000080"/>
</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-10-06T01:21:52.833035" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:52.833101" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:52.678168" elapsed="0.155023"/>
</kw>
<msg time="2026-10-06T01:21:52.833282" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:52.833323" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.676140" elapsed="0.157218"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:52.833686" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:52.833447" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.833430" elapsed="0.000330"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:52.676005" elapsed="0.157777"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:52.365731" elapsed="0.468084"/>
</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-10-06T01:21:52.363599" elapsed="0.470275"/>
</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-10-06T01:21:52.361726" elapsed="0.472205"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.361276" elapsed="0.472701"/>
</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-10-06T01:21:52.360266" elapsed="0.473765"/>
</kw>
<kw name="Add Sample Port To The Manual Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:21:52.838559" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Add Port vx1 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:21:52.837241" elapsed="0.001353">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Add port with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:21:52.359808" elapsed="0.478942">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s1-s1-t20" name="Create Tap Device After Fail" line="107">
<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-10-06T01:21:52.840194" elapsed="0.000201"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:52.839947" elapsed="0.000515"/>
</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-10-06T01:21:52.841360" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:52.841272" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.841254" elapsed="0.000185"/>
</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-10-06T01:21:52.843304" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:52.843221" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.843205" elapsed="0.000161"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:52.844296" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:52.843949" elapsed="0.000372"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:52.844773" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:52.844485" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:52.844839" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:21:52.844966" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:52.843584" elapsed="0.001404"/>
</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-10-06T01:21:52.847536" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:52.847449" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.847431" elapsed="0.000167"/>
</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-10-06T01:21:52.848719" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:52.848613" elapsed="0.000180"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.848596" elapsed="0.000219"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:52.849189" 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-10-06T01:21:52.848959" elapsed="0.000255"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:52.849564" 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-10-06T01:21:52.849374" elapsed="0.000214"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:52.889524" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:52.850204" elapsed="0.039524"/>
</kw>
<msg time="2026-10-06T01:21:52.889895" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:52.889938" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.849758" elapsed="0.040215"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:52.959308" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "A "f "t "e "r "[78C[C "[A[78CF
 "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:52.890599" elapsed="0.068923"/>
</kw>
<msg time="2026-10-06T01:21:52.959717" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:52.959759" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.890144" elapsed="0.069651"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:52.960119" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:52.959882" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.959857" elapsed="0.000360"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:52.960801" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "A "f "t "e "r "[78C[C "[A[78CF
 "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:52.960401" elapsed="0.000481"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:52.961143" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:52.960944" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.960927" elapsed="0.000313"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:52.961274" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:52.963887" elapsed="0.000481"/>
</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-10-06T01:21:52.965661" elapsed="0.000526"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:52.967567" elapsed="0.000334"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:52.962154" elapsed="0.005814"/>
</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-10-06T01:21:52.961604" elapsed="0.006481"/>
</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="PASS" start="2026-10-06T01:21:52.848338" elapsed="0.119827"/>
</kw>
<msg time="2026-10-06T01:21:52.968252" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:52.968292" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.847761" elapsed="0.120568"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:52.968497" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:52.968398" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.968381" elapsed="0.000195"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:52.968955" elapsed="0.000024"/>
</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-10-06T01:21:52.969377" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:52.969462" 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="PASS" start="2026-10-06T01:21:52.847140" elapsed="0.122413"/>
</kw>
<msg time="2026-10-06T01:21:52.969641" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:52.969696" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.845323" elapsed="0.124412"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:52.970030" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:52.969807" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.969790" elapsed="0.000312"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:52.845184" elapsed="0.124940"/>
</iter>
<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-10-06T01:21:52.972826" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:52.972740" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.972722" elapsed="0.000167"/>
</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-10-06T01:21:52.973990" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:52.973905" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:52.973888" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:52.974443" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:52.974201" elapsed="0.000268"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:52.974823" 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-10-06T01:21:52.974632" elapsed="0.000215"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:53.034807" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:52.975432" elapsed="0.059565"/>
</kw>
<msg time="2026-10-06T01:21:53.035196" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:53.035238" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.975000" elapsed="0.060273"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:53.107634" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "A "f "t "e "r "[78C[C "[A[78CF
 "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:53.035949" elapsed="0.071879"/>
</kw>
<msg time="2026-10-06T01:21:53.107984" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:53.108025" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:53.035468" elapsed="0.072593"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:53.108354" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:53.108139" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:53.108118" elapsed="0.000352"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:53.109013" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "A "f "t "e "r "[78C[C "[A[78CF
 "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:53.108655" elapsed="0.000438"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:53.109358" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:53.109155" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:53.109138" elapsed="0.000326"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:53.109496" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:53.112117" elapsed="0.000501"/>
</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-10-06T01:21:53.113869" elapsed="0.000461"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:53.115536" elapsed="0.000355"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:53.110412" elapsed="0.005546"/>
</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-10-06T01:21:53.109826" elapsed="0.006248"/>
</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="PASS" start="2026-10-06T01:21:52.973625" elapsed="0.142528"/>
</kw>
<msg time="2026-10-06T01:21:53.116238" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:53.116278" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.973037" elapsed="0.143277"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:53.116485" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:53.116384" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:53.116367" elapsed="0.000197"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:53.117044" elapsed="0.000024"/>
</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-10-06T01:21:53.117348" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:53.117475" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:52.972419" elapsed="0.145146"/>
</kw>
<msg time="2026-10-06T01:21:53.117653" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:53.117710" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.970385" elapsed="0.147362"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:53.118038" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:53.117819" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:53.117802" elapsed="0.000308"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:52.970246" elapsed="0.147886"/>
</iter>
<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-10-06T01:21:53.120882" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:53.120797" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:53.120779" elapsed="0.000167"/>
</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-10-06T01:21:53.122044" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:53.121960" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:53.121943" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:53.122492" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:53.122246" elapsed="0.000271"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:53.122871" 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-10-06T01:21:53.122695" elapsed="0.000200"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:53.164314" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:53.123478" elapsed="0.041028"/>
</kw>
<msg time="2026-10-06T01:21:53.164662" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:53.164728" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:53.123047" elapsed="0.041717"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:53.266250" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "A "f "t "e "r "[78C[C "[A[78CF
 "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:53.165352" elapsed="0.101132"/>
</kw>
<msg time="2026-10-06T01:21:53.266644" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:53.266708" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:53.164928" elapsed="0.101817"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:53.267026" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:53.266818" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:53.266799" elapsed="0.000321"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:53.267661" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "A "f "t "e "r "[78C[C "[A[78CF
 "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:53.267303" elapsed="0.000455"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:53.268018" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:53.267820" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:53.267804" elapsed="0.000307"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:53.268142" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:53.270641" elapsed="0.000498"/>
</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-10-06T01:21:53.272376" elapsed="0.000489"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:53.274059" elapsed="0.000310"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:53.268950" elapsed="0.005504"/>
</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-10-06T01:21:53.268432" elapsed="0.006139"/>
</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="PASS" start="2026-10-06T01:21:53.121701" elapsed="0.152947"/>
</kw>
<msg time="2026-10-06T01:21:53.274998" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:53.275039" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:53.121093" elapsed="0.153981"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:53.275229" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:53.275144" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:53.275127" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:53.275638" elapsed="0.000024"/>
</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-10-06T01:21:53.275958" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:53.276023" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:53.120482" elapsed="0.155627"/>
</kw>
<msg time="2026-10-06T01:21:53.276192" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:53.276231" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:53.118391" elapsed="0.157875"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:53.276567" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:53.276334" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:53.276318" elapsed="0.000321"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:53.118253" elapsed="0.158407"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:52.845039" elapsed="0.431718"/>
</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-10-06T01:21:52.842930" elapsed="0.433887"/>
</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-10-06T01:21:52.841015" elapsed="0.435891"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:52.840606" elapsed="0.436346"/>
</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-10-06T01:21:52.839590" elapsed="0.437415"/>
</kw>
<kw name="Create Sample Tap Device" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:53.279378" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:53.279134" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:53.278946" elapsed="0.000525"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:53.279817" 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-10-06T01:21:53.279911" 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-10-06T01:21:53.279666" elapsed="0.000270"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:53.280434" level="INFO">Attempting to execute command "ip tuntap add mode tap vport1" on remote system "10.30.170.234" 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-10-06T01:21:53.280124" elapsed="0.000353"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:53.280974" level="INFO">${conn_id} = 105</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-10-06T01:21:53.280653" elapsed="0.000346"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:21:53.281880" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:21:53.281951" 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-10-06T01:21:53.281581" elapsed="0.000393"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:53.282123" elapsed="0.000300"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:21:53.283227" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:21:53.780465" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:20:56 UTC 2026

  System load:  0.16               Processes:             110
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:21:42 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:21:53.282985" elapsed="0.497617"/>
</kw>
<msg time="2026-10-06T01:21:53.780703" 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-10-06T01:21:53.282587" elapsed="0.498196"/>
</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-10-06T01:21:53.281192" elapsed="0.499694"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:21:53.781436" level="INFO">Executing command 'ip tuntap add mode tap vport1'.</msg>
<msg time="2026-10-06T01:21:53.794576" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-10-06T01:21:53.794707" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:21:53.794749" level="INFO">${stderr} = ioctl(TUNSETIFF): Operation not permitted</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-10-06T01:21:53.781157" elapsed="0.013613"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:53.794930" elapsed="0.000224"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:53.795716" level="INFO">ioctl(TUNSETIFF): Operation not permitted</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:53.795418" elapsed="0.000340"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:53.795964" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:53.795844" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:53.795815" elapsed="0.000223"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:21:53.796168" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:53.796087" elapsed="0.000136"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:53.796073" elapsed="0.000174"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:53.796338" elapsed="0.000015"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:53.797124" 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-10-06T01:21:53.797627" elapsed="0.000170"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:53.797937" elapsed="0.000088"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:53.796671" elapsed="0.001400"/>
</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-10-06T01:21:53.278529" elapsed="0.519612"/>
</kw>
<msg time="2026-10-06T01:21:53.798190" 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-10-06T01:21:53.277997" elapsed="0.520242"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ip tuntap add mode tap vport1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:21:53.277564" elapsed="0.520751"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:53.800417" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:53.800161" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:53.800143" elapsed="0.000350"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:53.800830" 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-10-06T01:21:53.800924" 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-10-06T01:21:53.800697" elapsed="0.000251"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:53.801441" level="INFO">Attempting to execute command "ip tuntap add mode tap vport2" on remote system "10.30.170.234" 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-10-06T01:21:53.801136" elapsed="0.000347"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:53.801977" level="INFO">${conn_id} = 107</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-10-06T01:21:53.801660" elapsed="0.000341"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:21:53.802845" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:21:53.802913" 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-10-06T01:21:53.802567" elapsed="0.000368"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:53.803083" elapsed="0.000290"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:21:53.804204" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:21:54.210618" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:20:56 UTC 2026

  System load:  0.16               Processes:             110
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:21:53 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:21:53.803974" elapsed="0.406780"/>
</kw>
<msg time="2026-10-06T01:21:54.210826" 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-10-06T01:21:53.803586" elapsed="0.407313"/>
</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-10-06T01:21:53.802193" elapsed="0.408804"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:21:54.211531" level="INFO">Executing command 'ip tuntap add mode tap vport2'.</msg>
<msg time="2026-10-06T01:21:54.224534" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-10-06T01:21:54.224651" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:21:54.224710" level="INFO">${stderr} = ioctl(TUNSETIFF): Operation not permitted</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-10-06T01:21:54.211250" elapsed="0.013484"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:54.224894" elapsed="0.000219"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:54.225851" level="INFO">ioctl(TUNSETIFF): Operation not permitted</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:54.225460" elapsed="0.000449"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:54.226169" elapsed="0.000026"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:54.226015" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:54.225980" elapsed="0.000293"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:21:54.226484" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-10-06T01:21:54.226342" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:54.226322" elapsed="0.000273"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:54.226638" elapsed="0.000018"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:54.227702" elapsed="0.000395"/>
</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-10-06T01:21:54.228351" elapsed="0.000223"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:54.228787" elapsed="0.000124"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:54.227075" elapsed="0.001900"/>
</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-10-06T01:21:53.799733" elapsed="0.429339"/>
</kw>
<msg time="2026-10-06T01:21:54.229139" 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-10-06T01:21:53.798946" elapsed="0.430256"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ip tuntap add mode tap vport2</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:21:53.798506" elapsed="0.430796"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:54.232211" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:54.231887" elapsed="0.000396"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:54.231863" elapsed="0.000451"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:54.232790" 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-10-06T01:21:54.232918" 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-10-06T01:21:54.232595" elapsed="0.000358"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:54.233630" level="INFO">Attempting to execute command "ifconfig vport1 up" on remote system "10.30.170.234" 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-10-06T01:21:54.233212" elapsed="0.000496"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:54.234364" level="INFO">${conn_id} = 109</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-10-06T01:21:54.233952" elapsed="0.000461"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:21:54.235570" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:21:54.235666" 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-10-06T01:21:54.235199" elapsed="0.000517"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:54.235923" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:21:54.237467" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:21:54.627787" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:20:56 UTC 2026

  System load:  0.16               Processes:             110
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:21:54 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:21:54.237128" elapsed="0.390851"/>
</kw>
<msg time="2026-10-06T01:21:54.628054" 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-10-06T01:21:54.236604" elapsed="0.391523"/>
</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-10-06T01:21:54.234702" elapsed="0.393520"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:21:54.628713" level="INFO">Executing command 'ifconfig vport1 up'.</msg>
<msg time="2026-10-06T01:21:54.641855" level="INFO">Command exited with return code 255.</msg>
<msg time="2026-10-06T01:21:54.642011" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:21:54.642070" level="INFO">${stderr} = vport1: ERROR while getting interface flags: No such device</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-10-06T01:21:54.628486" elapsed="0.013617"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:54.642357" elapsed="0.000314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:54.643440" level="INFO">vport1: ERROR while getting interface flags: No such device</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:54.643034" elapsed="0.000469"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:54.643798" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:54.643615" elapsed="0.000253"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:54.643578" elapsed="0.000325"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:21:54.644094" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-10-06T01:21:54.643974" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:54.643954" elapsed="0.000254"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:54.644253" elapsed="0.000019"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:54.645335" elapsed="0.000466"/>
</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-10-06T01:21:54.646071" elapsed="0.000484"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:54.646793" elapsed="0.000134"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:54.644725" elapsed="0.002273"/>
</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-10-06T01:21:54.231253" elapsed="0.415846"/>
</kw>
<msg time="2026-10-06T01:21:54.647169" 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-10-06T01:21:54.230174" elapsed="0.417061"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ifconfig vport1 up</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:21:54.229569" elapsed="0.417771"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:54.650087" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:54.649740" elapsed="0.000423"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:54.649712" elapsed="0.000485"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:54.650703" 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-10-06T01:21:54.650839" 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-10-06T01:21:54.650497" elapsed="0.000378"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:54.651593" level="INFO">Attempting to execute command "ifconfig vport2 up" on remote system "10.30.170.234" 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-10-06T01:21:54.651147" elapsed="0.000508"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:54.652371" level="INFO">${conn_id} = 111</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-10-06T01:21:54.651937" elapsed="0.000484"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:21:54.653648" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:21:54.653771" 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-10-06T01:21:54.653254" elapsed="0.000549"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:54.654073" elapsed="0.000441"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:21:54.655672" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:21:55.064721" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:20:56 UTC 2026

  System load:  0.16               Processes:             110
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:21:54 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:21:54.655317" elapsed="0.409522"/>
</kw>
<msg time="2026-10-06T01:21:55.064908" 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-10-06T01:21:54.654776" elapsed="0.410203"/>
</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-10-06T01:21:54.652728" elapsed="0.412356"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:21:55.065539" level="INFO">Executing command 'ifconfig vport2 up'.</msg>
<msg time="2026-10-06T01:21:55.079012" level="INFO">Command exited with return code 255.</msg>
<msg time="2026-10-06T01:21:55.079122" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:21:55.079163" level="INFO">${stderr} = vport2: ERROR while getting interface flags: No such device</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-10-06T01:21:55.065330" elapsed="0.013861"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:55.079450" elapsed="0.000343"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:55.080510" level="INFO">vport2: ERROR while getting interface flags: No such device</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:55.080126" elapsed="0.000441"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:55.080850" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:55.080694" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.080639" elapsed="0.000308"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:21:55.081151" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:21:55.081015" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.080996" elapsed="0.000264"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:21:55.081303" elapsed="0.000018"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:55.082638" elapsed="0.000420"/>
</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-10-06T01:21:55.083313" elapsed="0.000215"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:55.083750" elapsed="0.000125"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:55.082038" elapsed="0.001904"/>
</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-10-06T01:21:54.649072" elapsed="0.434965"/>
</kw>
<msg time="2026-10-06T01:21:55.084102" 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-10-06T01:21:54.648260" elapsed="0.435904"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ifconfig vport2 up</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:21:54.647621" elapsed="0.436640"/>
</kw>
<doc>Create Tap Device vport1 and vport2 to add to the bridge br-s1 using OVS command.</doc>
<status status="PASS" start="2026-10-06T01:21:53.277216" elapsed="1.807118"/>
</kw>
<doc>Create tap devices to add to the bridge in ovs</doc>
<status status="PASS" start="2026-10-06T01:21:52.839088" elapsed="2.245412"/>
</test>
<test id="s1-s1-s1-t21" name="Add Tap Device Manually and Verify After Fail" line="111">
<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-10-06T01:21:55.086846" elapsed="0.000281"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:55.086430" elapsed="0.000767"/>
</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-10-06T01:21:55.088629" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:55.088509" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.088484" elapsed="0.000255"/>
</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-10-06T01:21:55.091585" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:55.091458" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.091435" elapsed="0.000239"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:55.092993" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:55.092496" elapsed="0.000535"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:55.093657" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:55.093260" elapsed="0.000459"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:55.093777" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:21:55.093955" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:55.091984" elapsed="0.002002"/>
</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-10-06T01:21:55.097604" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:55.097484" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.097459" elapsed="0.000254"/>
</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-10-06T01:21:55.099325" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:55.099201" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.099178" elapsed="0.000251"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:55.099989" 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-10-06T01:21:55.099633" elapsed="0.000390"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:55.100599" 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-10-06T01:21:55.100247" elapsed="0.000402"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:55.137592" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:55.101663" elapsed="0.036132"/>
</kw>
<msg time="2026-10-06T01:21:55.137954" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:55.137995" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.100937" elapsed="0.037093"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:55.218120" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:55.138637" elapsed="0.079671"/>
</kw>
<msg time="2026-10-06T01:21:55.218484" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:55.218527" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.138194" elapsed="0.080369"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:55.218873" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:55.218637" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.218617" elapsed="0.000354"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:55.219515" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:55.219154" elapsed="0.000451"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:55.219884" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:55.219668" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.219651" elapsed="0.000362"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:55.220043" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:55.222563" elapsed="0.000511"/>
</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-10-06T01:21:55.224356" elapsed="0.000557"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:55.226110" elapsed="0.000330"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:55.220860" elapsed="0.005649"/>
</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-10-06T01:21:55.220318" elapsed="0.006307"/>
</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="PASS" start="2026-10-06T01:21:55.098841" elapsed="0.127880"/>
</kw>
<msg time="2026-10-06T01:21:55.226804" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:55.226843" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.097922" elapsed="0.128958"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:55.227033" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:55.226948" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.226931" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:55.227453" elapsed="0.000024"/>
</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-10-06T01:21:55.228055" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:55.228121" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:55.097055" elapsed="0.131152"/>
</kw>
<msg time="2026-10-06T01:21:55.228290" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:55.228331" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.094496" elapsed="0.133883"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:55.228664" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:55.228448" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.228432" elapsed="0.000320"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:55.094273" elapsed="0.134500"/>
</iter>
<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-10-06T01:21:55.231281" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:55.231196" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.231178" elapsed="0.000164"/>
</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-10-06T01:21:55.232456" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:55.232356" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.232340" elapsed="0.000179"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:55.233036" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:55.232660" elapsed="0.000400"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:55.233408" 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-10-06T01:21:55.233220" elapsed="0.000212"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:55.277969" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:55.234022" elapsed="0.044122"/>
</kw>
<msg time="2026-10-06T01:21:55.278300" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:55.278341" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.233585" elapsed="0.044806"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:55.372659" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:55.279037" elapsed="0.093821"/>
</kw>
<msg time="2026-10-06T01:21:55.373016" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:55.373056" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.278595" elapsed="0.094496"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:55.373382" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:55.373162" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.373143" elapsed="0.000334"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:55.374024" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:55.373661" elapsed="0.000446"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:55.374362" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:55.374167" elapsed="0.000277"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.374151" elapsed="0.000315"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:55.374497" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:55.376979" elapsed="0.000495"/>
</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-10-06T01:21:55.378706" elapsed="0.000457"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:55.380379" elapsed="0.000334"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:55.375273" elapsed="0.005508"/>
</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-10-06T01:21:55.374784" elapsed="0.006114"/>
</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="PASS" start="2026-10-06T01:21:55.232095" elapsed="0.148879"/>
</kw>
<msg time="2026-10-06T01:21:55.381056" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:55.381094" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.231501" elapsed="0.149628"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:55.381279" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:55.381197" elapsed="0.000136"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.381180" elapsed="0.000174"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:55.381977" elapsed="0.000025"/>
</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-10-06T01:21:55.382284" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:55.382352" elapsed="0.000029"/>
</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="PASS" start="2026-10-06T01:21:55.230899" elapsed="0.151555"/>
</kw>
<msg time="2026-10-06T01:21:55.382538" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:55.382578" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.229026" elapsed="0.153586"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:55.382909" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:55.382694" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.382663" elapsed="0.000351"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:55.228885" elapsed="0.154150"/>
</iter>
<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-10-06T01:21:55.385537" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:55.385452" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.385434" elapsed="0.000165"/>
</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-10-06T01:21:55.386719" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:55.386613" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.386596" elapsed="0.000187"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:55.387147" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:55.386923" elapsed="0.000249"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:55.387522" 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-10-06T01:21:55.387331" elapsed="0.000215"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:55.433972" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:55.388128" elapsed="0.046016"/>
</kw>
<msg time="2026-10-06T01:21:55.434300" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:55.434342" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.387715" elapsed="0.046676"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:55.532485" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:55.435000" elapsed="0.097699"/>
</kw>
<msg time="2026-10-06T01:21:55.532867" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:55.532908" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.434555" elapsed="0.098389"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:55.533238" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:55.533021" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.532999" elapsed="0.000335"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:55.533979" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:55.533538" elapsed="0.000554"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:55.534404" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:55.534171" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.534146" elapsed="0.000353"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:55.534530" elapsed="0.000030"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:55.537072" elapsed="0.000499"/>
</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-10-06T01:21:55.538841" elapsed="0.000464"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:55.540668" elapsed="0.000326"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:55.535339" elapsed="0.005720"/>
</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-10-06T01:21:55.534837" elapsed="0.006339"/>
</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="PASS" start="2026-10-06T01:21:55.386339" elapsed="0.154917"/>
</kw>
<msg time="2026-10-06T01:21:55.541339" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:55.541391" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.385761" elapsed="0.155707"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:55.541627" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:55.541541" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.541523" elapsed="0.000260"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:55.542100" elapsed="0.000024"/>
</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-10-06T01:21:55.542420" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:55.542486" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:55.385146" elapsed="0.157426"/>
</kw>
<msg time="2026-10-06T01:21:55.542656" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:55.542712" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.383282" elapsed="0.159466"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:55.543039" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:55.542818" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.542801" elapsed="0.000310"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:55.383145" elapsed="0.159987"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:55.094061" elapsed="0.449099"/>
</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-10-06T01:21:55.091029" elapsed="0.452186"/>
</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-10-06T01:21:55.088122" elapsed="0.455145"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.087537" elapsed="0.455773"/>
</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-10-06T01:21:55.085909" elapsed="0.457470"/>
</kw>
<kw name="Add Sample Tap Device To The Manual Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:21:55.548335" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Add Tap Device vport1 and vport2 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:21:55.546926" elapsed="0.001456">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Add tap devices to the bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:21:55.085005" elapsed="0.463520">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s1-s1-t22" name="Delete the Bridge Manually and Verify After Fail" line="115">
<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-10-06T01:21:55.550092" elapsed="0.000201"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:55.549850" elapsed="0.000493"/>
</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-10-06T01:21:55.551244" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:55.551157" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.551140" elapsed="0.000167"/>
</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-10-06T01:21:55.553167" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:55.553084" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.553068" elapsed="0.000161"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:55.554139" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:55.553815" elapsed="0.000349"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:55.554599" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:55.554312" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:55.554664" elapsed="0.000042"/>
</return>
<msg time="2026-10-06T01:21:55.554806" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:55.553448" elapsed="0.001381"/>
</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-10-06T01:21:55.557357" elapsed="0.000026"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:55.557272" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.557255" elapsed="0.000179"/>
</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-10-06T01:21:55.558528" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:55.558445" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.558428" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:55.558982" 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-10-06T01:21:55.558755" elapsed="0.000252"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:55.559336" 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-10-06T01:21:55.559166" elapsed="0.000213"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:55.597017" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:55.559964" elapsed="0.037239"/>
</kw>
<msg time="2026-10-06T01:21:55.597377" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:55.597420" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.559535" elapsed="0.037921"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:55.687260" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:55.598078" elapsed="0.089380"/>
</kw>
<msg time="2026-10-06T01:21:55.687617" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:55.687658" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.597626" elapsed="0.090089"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:55.687998" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:55.687790" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.687770" elapsed="0.000323"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:55.688647" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:55.688270" elapsed="0.000480"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:55.689007" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:55.688812" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.688796" elapsed="0.000304"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:55.689130" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:55.691692" elapsed="0.000476"/>
</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-10-06T01:21:55.693410" elapsed="0.000491"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:55.695108" elapsed="0.000329"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:55.689965" elapsed="0.005538"/>
</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-10-06T01:21:55.689428" elapsed="0.006194"/>
</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="PASS" start="2026-10-06T01:21:55.558176" elapsed="0.137712"/>
</kw>
<msg time="2026-10-06T01:21:55.695973" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:55.696013" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.557583" elapsed="0.138500"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:55.696240" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:55.696155" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.696138" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:55.696649" elapsed="0.000039"/>
</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-10-06T01:21:55.696966" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:55.697031" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:55.556982" elapsed="0.140136"/>
</kw>
<msg time="2026-10-06T01:21:55.697202" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:55.697241" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.555192" elapsed="0.142085"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:55.697586" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:55.697345" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.697329" elapsed="0.000328"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:55.555055" elapsed="0.142748"/>
</iter>
<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-10-06T01:21:55.700279" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:55.700195" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.700177" elapsed="0.000164"/>
</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-10-06T01:21:55.701454" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:55.701357" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.701340" elapsed="0.000178"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:55.701909" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:55.701659" elapsed="0.000274"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:55.702261" 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-10-06T01:21:55.702091" elapsed="0.000195"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:55.743806" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:55.702876" elapsed="0.041104"/>
</kw>
<msg time="2026-10-06T01:21:55.744137" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:55.744179" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.702450" elapsed="0.041764"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:55.833888" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:55.744834" elapsed="0.089251"/>
</kw>
<msg time="2026-10-06T01:21:55.834255" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:55.834296" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.744391" elapsed="0.089940"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:55.834646" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:55.834429" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.834407" elapsed="0.000361"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:55.835302" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:55.834951" elapsed="0.000492"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:55.835723" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:55.835507" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.835490" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:55.835850" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:55.838385" elapsed="0.000501"/>
</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-10-06T01:21:55.840122" elapsed="0.000476"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:55.841804" elapsed="0.000311"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:55.836650" elapsed="0.005533"/>
</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-10-06T01:21:55.836136" elapsed="0.006163"/>
</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="PASS" start="2026-10-06T01:21:55.701095" elapsed="0.141297"/>
</kw>
<msg time="2026-10-06T01:21:55.842476" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:55.842516" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.700501" elapsed="0.142050"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:55.842992" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:55.842620" elapsed="0.000427"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.842603" elapsed="0.000467"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:55.843404" elapsed="0.000024"/>
</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-10-06T01:21:55.843724" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:55.843790" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:55.699905" elapsed="0.143971"/>
</kw>
<msg time="2026-10-06T01:21:55.843960" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:55.844000" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.698058" elapsed="0.145977"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:55.844318" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:55.844103" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.844087" elapsed="0.000319"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:55.697921" elapsed="0.146506"/>
</iter>
<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-10-06T01:21:55.847006" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:55.846923" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.846906" elapsed="0.000163"/>
</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-10-06T01:21:55.848201" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:55.848118" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.848101" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:55.848689" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:55.848421" elapsed="0.000304"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:55.849067" 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-10-06T01:21:55.848896" elapsed="0.000194"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:55.895761" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:55.849706" elapsed="0.046248"/>
</kw>
<msg time="2026-10-06T01:21:55.896175" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:55.896216" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.849262" elapsed="0.046989"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:55.986289" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:55.896885" elapsed="0.089619"/>
</kw>
<msg time="2026-10-06T01:21:55.986718" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:55.986763" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.896438" elapsed="0.090361"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:55.987104" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:55.986879" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.986857" elapsed="0.000346"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:55.987779" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:55.987402" elapsed="0.000465"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:55.988128" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:55.987930" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.987913" elapsed="0.000310"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:55.988255" elapsed="0.000034"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:55.990969" elapsed="0.000521"/>
</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-10-06T01:21:55.992853" elapsed="0.000518"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:55.994757" elapsed="0.000316"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:55.989121" elapsed="0.006020"/>
</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-10-06T01:21:55.988569" elapsed="0.006692"/>
</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="PASS" start="2026-10-06T01:21:55.847861" elapsed="0.147479"/>
</kw>
<msg time="2026-10-06T01:21:55.995438" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:55.995479" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.847215" elapsed="0.148300"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:55.995744" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-10-06T01:21:55.995586" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.995569" elapsed="0.000259"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:55.996156" elapsed="0.000024"/>
</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-10-06T01:21:55.996477" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:55.996544" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:55.846614" elapsed="0.150017"/>
</kw>
<msg time="2026-10-06T01:21:55.996735" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:55.996776" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.844728" elapsed="0.152085"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:55.997160" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:55.996926" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:55.996909" elapsed="0.000324"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:55.844542" elapsed="0.152715"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:55.554912" elapsed="0.442376"/>
</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-10-06T01:21:55.552794" elapsed="0.444549"/>
</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-10-06T01:21:55.550905" elapsed="0.446505"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:55.550502" elapsed="0.446952"/>
</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-10-06T01:21:55.549496" elapsed="0.448007"/>
</kw>
<kw name="Delete Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:21:56.000463" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Delete bridge br-s1 using OVS command and verify it gets applied in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:21:55.999169" elapsed="0.001329">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Delete bridge with OVS command and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:21:55.548915" elapsed="0.451714">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s1-s1-t23" name="Create Bridge In Owner and Verify After Fail" line="119">
<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-10-06T01:21:56.002143" elapsed="0.000200"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:56.001898" elapsed="0.000511"/>
</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-10-06T01:21:56.003295" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:56.003209" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.003192" elapsed="0.000180"/>
</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-10-06T01:21:56.005558" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:56.005461" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.005443" elapsed="0.000178"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:56.006564" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:56.006207" elapsed="0.000383"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:56.007052" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:56.006760" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:56.007118" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:21:56.007245" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:56.005848" elapsed="0.001420"/>
</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-10-06T01:21:56.009862" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:56.009778" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.009761" elapsed="0.000165"/>
</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-10-06T01:21:56.011055" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:56.010971" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.010954" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:56.011504" 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-10-06T01:21:56.011261" elapsed="0.000268"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:56.011882" 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-10-06T01:21:56.011707" elapsed="0.000199"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:56.047636" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:56.012487" elapsed="0.035357"/>
</kw>
<msg time="2026-10-06T01:21:56.048015" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:56.048057" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.012061" elapsed="0.036128"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:56.126328" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:56.048862" elapsed="0.077672"/>
</kw>
<msg time="2026-10-06T01:21:56.126721" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:56.126764" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.048387" elapsed="0.078413"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:56.127120" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:56.126888" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.126861" elapsed="0.000359"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:56.127805" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:56.127422" elapsed="0.000469"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:56.128150" elapsed="0.000018"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:56.127953" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.127936" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:56.128275" elapsed="0.000037"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:56.130957" elapsed="0.000500"/>
</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-10-06T01:21:56.132723" elapsed="0.000484"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:56.134427" elapsed="0.000498"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:56.129193" elapsed="0.005801"/>
</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-10-06T01:21:56.128612" elapsed="0.006497"/>
</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="PASS" start="2026-10-06T01:21:56.010695" elapsed="0.124491"/>
</kw>
<msg time="2026-10-06T01:21:56.135270" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:56.135310" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.010076" elapsed="0.125271"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:56.135523" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:56.135437" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.135419" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:56.135952" elapsed="0.000023"/>
</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-10-06T01:21:56.136261" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:56.136327" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:56.009470" elapsed="0.126961"/>
</kw>
<msg time="2026-10-06T01:21:56.136518" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:56.136558" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.007615" elapsed="0.128982"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:56.137020" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:56.136667" elapsed="0.000451"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.136651" elapsed="0.000491"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:56.007475" elapsed="0.129689"/>
</iter>
<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-10-06T01:21:56.139789" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:56.139701" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.139664" elapsed="0.000187"/>
</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-10-06T01:21:56.140971" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:56.140886" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.140869" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:56.141423" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:56.141176" elapsed="0.000272"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:56.141802" 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-10-06T01:21:56.141609" elapsed="0.000217"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:56.185105" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:56.142460" elapsed="0.042820"/>
</kw>
<msg time="2026-10-06T01:21:56.185462" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:56.185505" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.141979" elapsed="0.043561"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:56.287755" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:56.186157" elapsed="0.101786"/>
</kw>
<msg time="2026-10-06T01:21:56.288103" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:56.288145" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.185730" elapsed="0.102450"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:56.288489" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:56.288260" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.288237" elapsed="0.000347"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:56.289159" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:56.288795" elapsed="0.000450"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:56.289527" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:56.289315" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.289299" elapsed="0.000321"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:56.289652" elapsed="0.000048"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:56.292277" elapsed="0.000520"/>
</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-10-06T01:21:56.294055" elapsed="0.000492"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:56.295957" elapsed="0.000313"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:56.290484" elapsed="0.005852"/>
</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-10-06T01:21:56.289968" elapsed="0.006506"/>
</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="PASS" start="2026-10-06T01:21:56.140603" elapsed="0.155948"/>
</kw>
<msg time="2026-10-06T01:21:56.296699" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:56.296741" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.139998" elapsed="0.156780"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:56.296935" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:56.296849" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.296831" elapsed="0.000191"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:56.297369" elapsed="0.000025"/>
</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-10-06T01:21:56.297764" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:56.297834" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:56.139382" elapsed="0.158539"/>
</kw>
<msg time="2026-10-06T01:21:56.298006" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:56.298046" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.137445" elapsed="0.160636"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:56.298381" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:56.298151" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.298135" elapsed="0.000319"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:56.137289" elapsed="0.161187"/>
</iter>
<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-10-06T01:21:56.301119" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:56.301017" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.300994" 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-10-06T01:21:56.302280" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:56.302196" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.302179" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:56.302749" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:56.302498" elapsed="0.000276"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:56.303102" 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-10-06T01:21:56.302933" elapsed="0.000193"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:56.342622" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:56.303715" elapsed="0.039107"/>
</kw>
<msg time="2026-10-06T01:21:56.342981" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:56.343023" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.303277" elapsed="0.039781"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:56.430011" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:56.343669" elapsed="0.086537"/>
</kw>
<msg time="2026-10-06T01:21:56.430388" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:56.430432" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.343225" elapsed="0.087242"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:56.430789" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:56.430545" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.430523" elapsed="0.000364"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:56.431502" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:56.431119" elapsed="0.000467"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:56.431865" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:56.431649" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.431632" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:56.431993" elapsed="0.000030"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:56.434567" elapsed="0.000503"/>
</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-10-06T01:21:56.436312" elapsed="0.000535"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:56.438228" elapsed="0.000326"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:56.432845" elapsed="0.005776"/>
</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-10-06T01:21:56.432290" elapsed="0.006466"/>
</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="PASS" start="2026-10-06T01:21:56.301941" elapsed="0.136893"/>
</kw>
<msg time="2026-10-06T01:21:56.438918" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:56.438957" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.301334" elapsed="0.137658"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:56.439147" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:56.439063" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.439045" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:56.439573" elapsed="0.000024"/>
</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-10-06T01:21:56.439963" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:56.440029" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:56.300712" elapsed="0.139404"/>
</kw>
<msg time="2026-10-06T01:21:56.440202" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:56.440243" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.298746" elapsed="0.141532"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:56.440737" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:56.440497" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.440332" elapsed="0.000479"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:56.298593" elapsed="0.142239"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:56.007317" elapsed="0.433545"/>
</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-10-06T01:21:56.005045" elapsed="0.435876"/>
</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-10-06T01:21:56.002954" elapsed="0.438022"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.002552" elapsed="0.438469"/>
</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-10-06T01:21:56.001539" elapsed="0.439536"/>
</kw>
<kw name="Create Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:21:56.445248" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Create bridge br01 in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:21:56.444073" elapsed="0.001211">Variable '${new_owner}' not found.</status>
</kw>
<doc>Create Bridge in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:21:56.000968" elapsed="0.444511">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t24" name="Create Port In Owner and Verify After Fail" line="123">
<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-10-06T01:21:56.447005" elapsed="0.000198"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:56.446758" elapsed="0.000495"/>
</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-10-06T01:21:56.448173" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:56.448087" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.448069" elapsed="0.000167"/>
</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-10-06T01:21:56.450139" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:56.450055" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.450038" elapsed="0.000163"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:56.451129" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:56.450798" elapsed="0.000357"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:56.451591" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:56.451305" elapsed="0.000310"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:56.451656" elapsed="0.000041"/>
</return>
<msg time="2026-10-06T01:21:56.451800" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:56.450425" elapsed="0.001399"/>
</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-10-06T01:21:56.454397" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:56.454299" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.454281" elapsed="0.000180"/>
</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-10-06T01:21:56.455559" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:56.455475" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.455458" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:56.456014" 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-10-06T01:21:56.455786" elapsed="0.000253"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:56.456382" 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-10-06T01:21:56.456198" elapsed="0.000208"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:56.492201" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:56.456987" elapsed="0.035407"/>
</kw>
<msg time="2026-10-06T01:21:56.492553" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:56.492594" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.456559" elapsed="0.036070"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:56.567540" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "a "n "[78Cd "[A[78C
 "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:56.493267" elapsed="0.074485"/>
</kw>
<msg time="2026-10-06T01:21:56.567913" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:56.567955" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.492815" elapsed="0.075176"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:56.568277" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:56.568065" elapsed="0.000414"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.568045" elapsed="0.000462"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:56.569051" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "a "n "[78Cd "[A[78C
 "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:56.568704" elapsed="0.000474"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:56.569453" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:56.569242" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.569225" elapsed="0.000323"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:56.569580" elapsed="0.000030"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:56.572116" elapsed="0.000496"/>
</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-10-06T01:21:56.573854" elapsed="0.000458"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:56.575506" elapsed="0.000347"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:56.570422" elapsed="0.005498"/>
</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-10-06T01:21:56.569899" elapsed="0.006136"/>
</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="PASS" start="2026-10-06T01:21:56.455205" elapsed="0.120907"/>
</kw>
<msg time="2026-10-06T01:21:56.576195" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:56.576235" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.454608" elapsed="0.121662"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:56.576438" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:56.576339" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.576322" elapsed="0.000195"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:56.577056" elapsed="0.000025"/>
</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-10-06T01:21:56.577382" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:56.577448" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:56.454007" elapsed="0.123532"/>
</kw>
<msg time="2026-10-06T01:21:56.577626" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:56.577666" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.452161" elapsed="0.125557"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:56.578007" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:56.577790" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.577773" elapsed="0.000305"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:56.452023" elapsed="0.126077"/>
</iter>
<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-10-06T01:21:56.580764" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:56.580664" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.580646" elapsed="0.000182"/>
</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-10-06T01:21:56.581938" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:56.581854" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.581837" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:56.582388" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:56.582141" elapsed="0.000272"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:56.582761" 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-10-06T01:21:56.582573" elapsed="0.000212"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:56.626456" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:56.583366" elapsed="0.043272"/>
</kw>
<msg time="2026-10-06T01:21:56.626887" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:56.626931" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.582938" elapsed="0.044028"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:56.710973" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "a "n "[78Cd "[A[78C
 "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:56.627600" elapsed="0.083559"/>
</kw>
<msg time="2026-10-06T01:21:56.711316" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:56.711381" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.627140" elapsed="0.084278"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:56.711730" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:56.711494" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.711473" elapsed="0.000354"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:56.712364" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "a "n "[78Cd "[A[78C
 "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:56.712006" elapsed="0.000442"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:56.712726" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:56.712509" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.712493" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:56.712852" elapsed="0.000031"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:56.715416" elapsed="0.000506"/>
</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-10-06T01:21:56.717174" elapsed="0.000489"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:56.719076" elapsed="0.000330"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:56.713717" elapsed="0.005755"/>
</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-10-06T01:21:56.713162" elapsed="0.006425"/>
</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="PASS" start="2026-10-06T01:21:56.581572" elapsed="0.138092"/>
</kw>
<msg time="2026-10-06T01:21:56.719765" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:56.719806" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.580975" elapsed="0.138866"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:56.719996" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:56.719911" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.719894" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:56.720415" elapsed="0.000024"/>
</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-10-06T01:21:56.720816" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:56.720884" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:56.580368" elapsed="0.140603"/>
</kw>
<msg time="2026-10-06T01:21:56.721054" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:56.721102" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.578375" elapsed="0.142763"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:56.721486" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:56.721244" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.721227" elapsed="0.000332"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:56.578218" elapsed="0.143364"/>
</iter>
<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-10-06T01:21:56.724178" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:56.724094" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.724077" elapsed="0.000163"/>
</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-10-06T01:21:56.725340" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:56.725254" elapsed="0.000147"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.725238" elapsed="0.000184"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:56.725819" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:56.725565" elapsed="0.000279"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:56.726177" 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-10-06T01:21:56.726006" elapsed="0.000195"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:56.765780" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:56.726802" elapsed="0.039154"/>
</kw>
<msg time="2026-10-06T01:21:56.766113" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:56.766155" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.726370" elapsed="0.039820"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:56.873039" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "a "n "[78Cd "[A[78C
 "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:56.766820" elapsed="0.106408"/>
</kw>
<msg time="2026-10-06T01:21:56.873408" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:56.873450" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.766374" elapsed="0.107111"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:56.873792" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:56.873557" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.873539" elapsed="0.000347"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:56.874416" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "a "n "[78Cd "[A[78C
 "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:56.874065" elapsed="0.000434"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:56.874772" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:56.874560" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.874544" elapsed="0.000322"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:56.874897" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:56.877355" elapsed="0.000497"/>
</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-10-06T01:21:56.879073" elapsed="0.000472"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:56.880934" elapsed="0.000304"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:56.875699" elapsed="0.005605"/>
</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-10-06T01:21:56.875173" elapsed="0.006258"/>
</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="PASS" start="2026-10-06T01:21:56.724994" elapsed="0.156556"/>
</kw>
<msg time="2026-10-06T01:21:56.881634" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:56.881688" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.724402" elapsed="0.157324"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:56.881882" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:56.881796" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.881779" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:56.882276" elapsed="0.000023"/>
</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-10-06T01:21:56.882592" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:56.882658" elapsed="0.000106"/>
</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="PASS" start="2026-10-06T01:21:56.723797" elapsed="0.159043"/>
</kw>
<msg time="2026-10-06T01:21:56.882924" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:56.882964" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.721854" elapsed="0.161145"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:56.883281" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:56.883067" elapsed="0.000262"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.883051" elapsed="0.000320"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:56.721714" elapsed="0.161679"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:56.451876" elapsed="0.431545"/>
</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-10-06T01:21:56.449762" elapsed="0.433715"/>
</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-10-06T01:21:56.447828" elapsed="0.435705"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.447416" elapsed="0.436161"/>
</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-10-06T01:21:56.446400" elapsed="0.437228"/>
</kw>
<kw name="Create Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:21:56.889025" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Add Port vx2 to bridge br01 in controller ${controller_index} and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:21:56.887859" elapsed="0.001201">Variable '${new_owner}' not found.</status>
</kw>
<doc>Create Port in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:21:56.445842" elapsed="0.443358">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t25" name="Modify the destination IP of Port In Owner After Fail" line="127">
<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-10-06T01:21:56.890746" elapsed="0.000200"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:56.890485" elapsed="0.000511"/>
</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-10-06T01:21:56.891899" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:56.891812" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.891795" elapsed="0.000166"/>
</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-10-06T01:21:56.893835" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:56.893753" elapsed="0.000123"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.893736" elapsed="0.000160"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:56.894806" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:56.894464" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:56.895254" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:56.894981" elapsed="0.000304"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:56.895325" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:21:56.895472" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:56.894098" elapsed="0.001427"/>
</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-10-06T01:21:56.898140" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:56.898054" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.898037" elapsed="0.000168"/>
</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-10-06T01:21:56.899303" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:56.899220" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:56.899203" elapsed="0.000177"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:56.899769" 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-10-06T01:21:56.899522" elapsed="0.000272"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:56.900126" 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-10-06T01:21:56.899956" elapsed="0.000194"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:56.934765" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:56.900745" elapsed="0.034195"/>
</kw>
<msg time="2026-10-06T01:21:56.935117" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:56.935168" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.900303" elapsed="0.034900"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:57.034159" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:56.935812" elapsed="0.098554"/>
</kw>
<msg time="2026-10-06T01:21:57.034532" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:57.034573" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.935379" elapsed="0.099230"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.034970" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:57.034708" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.034664" elapsed="0.000406"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:57.035630" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:57.035255" elapsed="0.000480"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.035995" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:57.035798" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.035781" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:57.036118" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:57.038739" elapsed="0.000480"/>
</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-10-06T01:21:57.040574" elapsed="0.000526"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:57.042533" elapsed="0.000337"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:57.036991" elapsed="0.005950"/>
</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-10-06T01:21:57.036462" elapsed="0.006598"/>
</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="PASS" start="2026-10-06T01:21:56.898962" elapsed="0.144179"/>
</kw>
<msg time="2026-10-06T01:21:57.043285" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:57.043326" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.898366" elapsed="0.145018"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:57.043550" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-10-06T01:21:57.043459" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.043440" elapsed="0.000195"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:57.044065" elapsed="0.000024"/>
</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-10-06T01:21:57.044394" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:57.044460" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:56.897762" elapsed="0.146786"/>
</kw>
<msg time="2026-10-06T01:21:57.044634" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:57.044691" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.895922" elapsed="0.148808"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.045020" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:57.044802" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.044786" elapsed="0.000305"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:56.895776" elapsed="0.149341"/>
</iter>
<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-10-06T01:21:57.047860" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:57.047775" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.047757" elapsed="0.000166"/>
</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-10-06T01:21:57.049037" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:57.048953" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.048936" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:57.049487" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:57.049240" elapsed="0.000272"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:57.049872" 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-10-06T01:21:57.049671" elapsed="0.000225"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:57.088642" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:57.050475" elapsed="0.038383"/>
</kw>
<msg time="2026-10-06T01:21:57.089014" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:57.089055" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.050048" elapsed="0.039042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:57.183479" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:57.089804" elapsed="0.093864"/>
</kw>
<msg time="2026-10-06T01:21:57.183850" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:57.183891" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.089258" elapsed="0.094669"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.184212" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:57.184003" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.183982" elapsed="0.000391"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:57.184921" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:57.184556" elapsed="0.000455"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.185275" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:57.185072" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.185056" elapsed="0.000329"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:57.185418" elapsed="0.000030"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:57.187971" elapsed="0.000498"/>
</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-10-06T01:21:57.189724" elapsed="0.000468"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:57.191418" elapsed="0.000336"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:57.186254" elapsed="0.005569"/>
</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-10-06T01:21:57.185749" elapsed="0.006193"/>
</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="PASS" start="2026-10-06T01:21:57.048670" elapsed="0.143349"/>
</kw>
<msg time="2026-10-06T01:21:57.192102" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:57.192146" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.048071" elapsed="0.144111"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:57.192351" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:21:57.192253" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.192235" elapsed="0.000195"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.193059" elapsed="0.000025"/>
</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-10-06T01:21:57.193387" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:57.193452" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:57.047452" elapsed="0.146088"/>
</kw>
<msg time="2026-10-06T01:21:57.193625" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:57.193664" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.045399" elapsed="0.148317"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.194006" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:57.193786" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.193770" elapsed="0.000307"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:57.045239" elapsed="0.148859"/>
</iter>
<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-10-06T01:21:57.196698" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:57.196597" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.196580" elapsed="0.000182"/>
</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-10-06T01:21:57.197871" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:57.197787" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.197770" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:57.198309" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:57.198080" elapsed="0.000253"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:57.198703" 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-10-06T01:21:57.198515" elapsed="0.000244"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:57.236552" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:57.199354" elapsed="0.037397"/>
</kw>
<msg time="2026-10-06T01:21:57.236923" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:57.236965" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.198922" elapsed="0.038079"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:57.334945" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:57.237610" elapsed="0.097516"/>
</kw>
<msg time="2026-10-06T01:21:57.335285" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:57.335330" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.237169" elapsed="0.098210"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.335653" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:57.335450" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.335431" elapsed="0.000338"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:57.336300" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:57.335968" elapsed="0.000439"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.336665" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:57.336469" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.336452" elapsed="0.000325"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:57.336807" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:57.339269" elapsed="0.000512"/>
</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-10-06T01:21:57.340989" elapsed="0.000485"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:57.342646" elapsed="0.000344"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:57.337607" elapsed="0.005448"/>
</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-10-06T01:21:57.337099" elapsed="0.006071"/>
</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="PASS" start="2026-10-06T01:21:57.197504" elapsed="0.145742"/>
</kw>
<msg time="2026-10-06T01:21:57.343328" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:57.343383" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.196909" elapsed="0.146510"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:57.343573" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:57.343489" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.343471" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.344166" elapsed="0.000024"/>
</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-10-06T01:21:57.344480" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:57.344545" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:57.196288" elapsed="0.148377"/>
</kw>
<msg time="2026-10-06T01:21:57.344769" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:57.344809" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.194367" elapsed="0.150477"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.345130" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:57.344912" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.344896" elapsed="0.000305"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:57.194213" elapsed="0.151009"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:56.895580" elapsed="0.449671"/>
</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-10-06T01:21:56.893448" elapsed="0.451862"/>
</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-10-06T01:21:56.891539" elapsed="0.453844"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:56.891140" elapsed="0.454287"/>
</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-10-06T01:21:56.890085" elapsed="0.455393"/>
</kw>
<kw name="Modify the destination IP of Sample Port" owner="ClusterOvsdb">
<msg time="2026-10-06T01:21:57.348430" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Modify the dst ip of port vx2 in bridge br01 in controller ${controller_index}.</doc>
<status status="FAIL" start="2026-10-06T01:21:57.347234" elapsed="0.001232">Variable '${new_owner}' not found.</status>
</kw>
<doc>Modify the dst ip of existing port in Owner.</doc>
<status status="FAIL" start="2026-10-06T01:21:56.889552" elapsed="0.459057">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t26" name="Verify Port Is Modified After Fail" line="131">
<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-10-06T01:21:57.350147" elapsed="0.000213"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:57.349896" elapsed="0.000583"/>
</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-10-06T01:21:57.351504" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:57.351417" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.351399" elapsed="0.000168"/>
</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-10-06T01:21:57.353464" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:57.353379" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.353362" elapsed="0.000163"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:57.354445" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:57.354100" elapsed="0.000370"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:57.354958" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:57.354620" elapsed="0.000363"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:57.355023" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:21:57.355150" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:57.353746" elapsed="0.001426"/>
</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-10-06T01:21:57.357784" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:57.357697" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.357663" elapsed="0.000184"/>
</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-10-06T01:21:57.358948" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:57.358863" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.358846" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:57.359389" 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-10-06T01:21:57.359152" elapsed="0.000261"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:57.359762" 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-10-06T01:21:57.359575" elapsed="0.000210"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:57.394850" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:57.360401" elapsed="0.034626"/>
</kw>
<msg time="2026-10-06T01:21:57.395187" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:57.395228" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.359973" elapsed="0.035290"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:57.462994" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CA
 "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:57.395891" elapsed="0.067290"/>
</kw>
<msg time="2026-10-06T01:21:57.463363" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:57.463406" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.395441" elapsed="0.068001"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.463764" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:57.463523" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.463500" elapsed="0.000362"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:57.464416" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CA
 "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:57.464044" elapsed="0.000453"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.464774" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:57.464560" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.464543" elapsed="0.000327"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:57.464900" elapsed="0.000030"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:57.467442" elapsed="0.000504"/>
</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-10-06T01:21:57.469205" elapsed="0.000510"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:57.471101" elapsed="0.000326"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:57.465749" elapsed="0.005746"/>
</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-10-06T01:21:57.465206" elapsed="0.006405"/>
</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="PASS" start="2026-10-06T01:21:57.358581" elapsed="0.113123"/>
</kw>
<msg time="2026-10-06T01:21:57.471790" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:57.471830" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.357994" elapsed="0.113872"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:57.472020" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:57.471935" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.471918" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:57.472437" elapsed="0.000024"/>
</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-10-06T01:21:57.472831" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:57.472898" 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="PASS" start="2026-10-06T01:21:57.357389" elapsed="0.115602"/>
</kw>
<msg time="2026-10-06T01:21:57.473089" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:57.473175" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.355522" elapsed="0.117691"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.473526" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:57.473286" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.473267" elapsed="0.000330"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:57.355384" elapsed="0.118235"/>
</iter>
<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-10-06T01:21:57.476189" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:57.476104" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.476087" elapsed="0.000166"/>
</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-10-06T01:21:57.477369" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:57.477270" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.477254" elapsed="0.000178"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:57.477823" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:57.477572" elapsed="0.000275"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:57.478176" 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-10-06T01:21:57.478006" elapsed="0.000194"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:57.517793" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:57.478799" elapsed="0.039169"/>
</kw>
<msg time="2026-10-06T01:21:57.518126" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:57.518168" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.478367" elapsed="0.039836"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:57.611004" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CA
 "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:57.518824" elapsed="0.092360"/>
</kw>
<msg time="2026-10-06T01:21:57.611365" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:57.611408" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.518379" elapsed="0.093063"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.611744" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:57.611515" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.611495" elapsed="0.000345"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:57.612377" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CA
 "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:57.612021" elapsed="0.000435"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.612731" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:57.612517" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.612501" elapsed="0.000323"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:57.612855" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:57.615324" elapsed="0.000508"/>
</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-10-06T01:21:57.617038" elapsed="0.000464"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:57.618665" elapsed="0.000525"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:57.613634" elapsed="0.005624"/>
</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-10-06T01:21:57.613130" elapsed="0.006300"/>
</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="PASS" start="2026-10-06T01:21:57.477013" elapsed="0.142495"/>
</kw>
<msg time="2026-10-06T01:21:57.619591" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:57.619631" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.476415" elapsed="0.143252"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:57.619843" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:57.619757" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.619740" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.620234" elapsed="0.000024"/>
</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-10-06T01:21:57.620550" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:57.620615" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:57.475810" elapsed="0.144985"/>
</kw>
<msg time="2026-10-06T01:21:57.620883" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:57.620923" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.473889" elapsed="0.147070"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.621246" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:57.621027" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.621011" elapsed="0.000306"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:57.473751" elapsed="0.147600"/>
</iter>
<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-10-06T01:21:57.623870" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:57.623787" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.623770" elapsed="0.000163"/>
</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-10-06T01:21:57.625040" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:57.624956" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.624939" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:57.625482" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:57.625243" elapsed="0.000264"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:57.625854" 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-10-06T01:21:57.625667" elapsed="0.000212"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:57.663081" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:57.626457" elapsed="0.036819"/>
</kw>
<msg time="2026-10-06T01:21:57.663448" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:57.663490" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.626032" elapsed="0.037493"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:57.736733" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CA
 "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:57.664126" elapsed="0.072782"/>
</kw>
<msg time="2026-10-06T01:21:57.737064" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:57.737104" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.663708" elapsed="0.073431"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.737469" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:57.737248" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.737229" elapsed="0.000335"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:57.738104" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CA
 "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:57.737767" elapsed="0.000418"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.738458" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:57.738247" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.738230" elapsed="0.000322"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:57.738582" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:57.741057" elapsed="0.000491"/>
</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-10-06T01:21:57.742801" elapsed="0.000449"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:57.744448" elapsed="0.000351"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:57.739368" elapsed="0.005498"/>
</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-10-06T01:21:57.738866" elapsed="0.006116"/>
</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="PASS" start="2026-10-06T01:21:57.624694" elapsed="0.120364"/>
</kw>
<msg time="2026-10-06T01:21:57.745139" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:57.745179" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.624078" elapsed="0.121136"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:57.745389" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:57.745283" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.745266" elapsed="0.000202"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.746000" elapsed="0.000024"/>
</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-10-06T01:21:57.746303" elapsed="0.000035"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:57.746381" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:57.623474" elapsed="0.122994"/>
</kw>
<msg time="2026-10-06T01:21:57.746550" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:57.746590" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.621601" elapsed="0.125025"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.746930" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:57.746711" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.746693" elapsed="0.000307"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:57.621464" elapsed="0.125557"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:57.355225" elapsed="0.391822"/>
</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-10-06T01:21:57.353073" elapsed="0.394026"/>
</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-10-06T01:21:57.351037" elapsed="0.396115"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.350628" elapsed="0.396567"/>
</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-10-06T01:21:57.349483" elapsed="0.397796"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<msg time="2026-10-06T01:21:57.750175" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>${new_cluster_list}</arg>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:21:57.748911" elapsed="0.001299">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Verify port is modified in all instances.</doc>
<status status="FAIL" start="2026-10-06T01:21:57.348973" elapsed="0.401394">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s1-s1-t27" name="Start Old Owner Instance" line="135">
<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-10-06T01:21:57.751825" elapsed="0.000199"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:57.751563" elapsed="0.000512"/>
</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-10-06T01:21:57.752980" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:57.752896" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.752879" elapsed="0.000163"/>
</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-10-06T01:21:57.754923" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:57.754834" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.754812" elapsed="0.000172"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:57.755906" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:57.755564" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:57.756363" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:57.756081" elapsed="0.000306"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:57.756427" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:21:57.756552" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:57.755192" elapsed="0.001382"/>
</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-10-06T01:21:57.759076" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:57.758992" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.758975" elapsed="0.000164"/>
</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-10-06T01:21:57.760243" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:57.760160" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.760143" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:57.760702" 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-10-06T01:21:57.760461" elapsed="0.000267"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:57.761057" 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-10-06T01:21:57.760889" elapsed="0.000192"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:57.795607" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:57.761659" elapsed="0.034147"/>
</kw>
<msg time="2026-10-06T01:21:57.795980" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:57.796022" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.761232" elapsed="0.034825"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:57.859930" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "t "a "r "t "[C "O "l "d "[C "O "w "n "e "r "[C "I "n "s "t "a "n "c "[78Ce "[A[78C"[K
[K
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:57.796655" elapsed="0.063451"/>
</kw>
<msg time="2026-10-06T01:21:57.860262" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:57.860302" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.796218" elapsed="0.064131"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.860622" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:57.860420" elapsed="0.000329"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.860402" elapsed="0.000371"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:57.861289" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "t "a "r "t "[C "O "l "d "[C "O "w "n "e "r "[C "I "n "s "t "a "n "c "[78Ce "[A[78C"[K
[K
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:57.860952" elapsed="0.000438"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.861648" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:57.861453" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.861436" elapsed="0.000325"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:57.861791" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:57.864235" elapsed="0.000511"/>
</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-10-06T01:21:57.865983" elapsed="0.000469"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:57.867634" elapsed="0.000539"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:57.862556" elapsed="0.005683"/>
</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-10-06T01:21:57.862053" elapsed="0.006317"/>
</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="PASS" start="2026-10-06T01:21:57.759903" elapsed="0.108544"/>
</kw>
<msg time="2026-10-06T01:21:57.868527" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:57.868566" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.759285" elapsed="0.109315"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:57.868771" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:57.868668" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.868651" elapsed="0.000196"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:57.869161" elapsed="0.000023"/>
</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-10-06T01:21:57.869485" elapsed="0.000028"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:57.869556" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:57.758703" elapsed="0.110939"/>
</kw>
<msg time="2026-10-06T01:21:57.869817" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:57.869857" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.756919" elapsed="0.112973"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.870176" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:57.869960" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.869944" elapsed="0.000303"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:57.756782" elapsed="0.113486"/>
</iter>
<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-10-06T01:21:57.872785" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:57.872698" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.872661" elapsed="0.000187"/>
</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-10-06T01:21:57.873949" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:57.873865" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.873848" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:57.874396" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:57.874154" elapsed="0.000267"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:57.874804" 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-10-06T01:21:57.874614" elapsed="0.000215"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:57.913881" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:57.875408" elapsed="0.038650"/>
</kw>
<msg time="2026-10-06T01:21:57.914218" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:57.914260" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.874983" elapsed="0.039312"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:57.979270" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "t "a "r "t "[C "O "l "d "[C "O "w "n "e "r "[C "I "n "s "t "a "n "c "[78Ce "[A[78C"[K
[K
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:57.914922" elapsed="0.064537"/>
</kw>
<msg time="2026-10-06T01:21:57.979615" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:57.979657" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.914476" elapsed="0.065240"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.979995" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:57.979790" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.979770" elapsed="0.000320"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:57.980631" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "t "a "r "t "[C "O "l "d "[C "O "w "n "e "r "[C "I "n "s "t "a "n "c "[78Ce "[A[78C"[K
[K
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:57.980273" elapsed="0.000450"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.980983" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:57.980786" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.980769" elapsed="0.000307"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:57.981107" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:57.983589" elapsed="0.000497"/>
</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-10-06T01:21:57.985319" elapsed="0.000494"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:57.987187" elapsed="0.000329"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:57.981915" elapsed="0.005666"/>
</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-10-06T01:21:57.981399" elapsed="0.006317"/>
</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="PASS" start="2026-10-06T01:21:57.873586" elapsed="0.114208"/>
</kw>
<msg time="2026-10-06T01:21:57.987875" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:57.987914" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.872993" elapsed="0.114957"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:57.988102" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:57.988018" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.988001" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.988518" elapsed="0.000023"/>
</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-10-06T01:21:57.988907" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:57.988973" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:57.872390" elapsed="0.116668"/>
</kw>
<msg time="2026-10-06T01:21:57.989179" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:57.989219" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.870527" elapsed="0.118732"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:57.989564" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:57.989338" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.989311" elapsed="0.000324"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:57.870391" elapsed="0.119265"/>
</iter>
<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-10-06T01:21:57.992187" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:57.992102" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.992085" elapsed="0.000165"/>
</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-10-06T01:21:57.993369" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:57.993273" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:57.993256" elapsed="0.000181"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:57.993825" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:57.993578" elapsed="0.000271"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:57.994182" 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-10-06T01:21:57.994009" elapsed="0.000196"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:58.031798" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:57.994815" elapsed="0.037199"/>
</kw>
<msg time="2026-10-06T01:21:58.032190" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:58.032232" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.994376" elapsed="0.037892"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:58.110875" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "t "a "r "t "[C "O "l "d "[C "O "w "n "e "r "[C "I "n "s "t "a "n "c "[78Ce "[A[78C"[K
[K
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:58.032958" elapsed="0.078109"/>
</kw>
<msg time="2026-10-06T01:21:58.111235" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:58.111276" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:58.032478" elapsed="0.078833"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:58.111667" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:58.111424" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:58.111395" elapsed="0.000396"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:58.112357" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "t "a "r "t "[C "O "l "d "[C "O "w "n "e "r "[C "I "n "s "t "a "n "c "[78Ce "[A[78C"[K
[K
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:58.111980" elapsed="0.000455"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:58.112713" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:58.112497" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:58.112480" elapsed="0.000329"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:58.112844" elapsed="0.000039"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:58.115522" elapsed="0.000506"/>
</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-10-06T01:21:58.117295" elapsed="0.000513"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:58.119069" elapsed="0.000329"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:58.113727" elapsed="0.005741"/>
</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-10-06T01:21:58.113169" elapsed="0.006417"/>
</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="PASS" start="2026-10-06T01:21:57.993012" elapsed="0.126652"/>
</kw>
<msg time="2026-10-06T01:21:58.119864" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:58.119905" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.992426" elapsed="0.127516"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:58.120098" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:21:58.120013" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:58.119995" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:58.120584" elapsed="0.000024"/>
</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-10-06T01:21:58.120944" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:58.121010" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:21:57.991812" elapsed="0.129286"/>
</kw>
<msg time="2026-10-06T01:21:58.121286" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:58.121342" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.989920" elapsed="0.131459"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:58.121933" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:58.121452" elapsed="0.000535"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:58.121436" elapsed="0.000573"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:57.989784" elapsed="0.132247"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:57.756623" elapsed="0.365442"/>
</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-10-06T01:21:57.754523" elapsed="0.367601"/>
</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-10-06T01:21:57.752622" elapsed="0.369557"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:57.752217" elapsed="0.370008"/>
</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-10-06T01:21:57.751208" elapsed="0.371069"/>
</kw>
<kw name="Start_Single_Member" owner="ClusterManagement">
<msg time="2026-10-06T01:21:58.125430" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Convenience keyword that starts the specified member of the cluster.</doc>
<status status="FAIL" start="2026-10-06T01:21:58.122509" elapsed="0.002959">Variable '${original_owner}' not found.</status>
</kw>
<doc>Start Owner Instance and verify it is active</doc>
<status status="FAIL" start="2026-10-06T01:21:57.750733" elapsed="0.374876">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t28" name="Check Shards Status After Recover" line="139">
<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-10-06T01:21:58.127104" elapsed="0.000200"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:21:58.126862" elapsed="0.000505"/>
</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-10-06T01:21:58.128255" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:58.128169" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:58.128152" elapsed="0.000166"/>
</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-10-06T01:21:58.130190" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:58.130107" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:58.130091" elapsed="0.000161"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:21:58.131195" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:21:58.130869" elapsed="0.000351"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:21:58.131707" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:21:58.131419" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:21:58.131773" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:21:58.131898" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:21:58.130497" elapsed="0.001423"/>
</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-10-06T01:21:58.170129" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:58.170010" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:58.169983" elapsed="0.000232"/>
</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-10-06T01:21:58.171525" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:58.171440" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:58.171423" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:58.172006" 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-10-06T01:21:58.171757" elapsed="0.000275"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:58.172382" 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-10-06T01:21:58.172197" elapsed="0.000209"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:58.212094" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:58.172988" elapsed="0.039284"/>
</kw>
<msg time="2026-10-06T01:21:58.212448" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:58.212489" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:58.172557" elapsed="0.039965"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:58.290796" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "A "f "t "[78Ce "[A[78Cr
 "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:58.213123" elapsed="0.077853"/>
</kw>
<msg time="2026-10-06T01:21:58.291131" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:58.291171" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:58.212704" elapsed="0.078501"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:58.291503" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:58.291277" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:58.291257" elapsed="0.000340"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:58.292141" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "A "f "t "[78Ce "[A[78Cr
 "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:58.291800" elapsed="0.000420"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:58.292493" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:58.292281" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:58.292264" elapsed="0.000323"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:58.292617" elapsed="0.000036"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:58.295181" elapsed="0.000524"/>
</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-10-06T01:21:58.296970" elapsed="0.000544"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:58.298931" elapsed="0.000307"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:58.293459" elapsed="0.005847"/>
</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-10-06T01:21:58.292936" elapsed="0.006559"/>
</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="PASS" start="2026-10-06T01:21:58.171165" elapsed="0.128424"/>
</kw>
<msg time="2026-10-06T01:21:58.299703" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:58.299745" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:58.170420" elapsed="0.129360"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:58.299940" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:21:58.299853" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:58.299835" elapsed="0.000183"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:21:58.300359" elapsed="0.000025"/>
</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-10-06T01:21:58.300666" elapsed="0.000116"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:58.300829" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:21:58.169316" elapsed="0.131603"/>
</kw>
<msg time="2026-10-06T01:21:58.301018" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:58.301069" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:58.132257" elapsed="0.168847"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:58.301407" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:58.301175" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:58.301159" elapsed="0.000320"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:21:58.132119" elapsed="0.169383"/>
</iter>
<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-10-06T01:21:58.304067" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:58.303983" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:58.303966" elapsed="0.000163"/>
</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-10-06T01:21:58.305229" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:58.305146" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:58.305130" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:58.305692" level="INFO">${karaf_connection_index} = 12</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-10-06T01:21:58.305450" elapsed="0.000268"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:58.306046" 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-10-06T01:21:58.305877" elapsed="0.000193"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:58.346065" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:58.306643" elapsed="0.039610"/>
</kw>
<msg time="2026-10-06T01:21:58.346428" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:58.346470" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:58.306221" elapsed="0.040283"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:58.417647" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "A "f "t "[78Ce "[A[78Cr
 "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:58.347102" elapsed="0.070757"/>
</kw>
<msg time="2026-10-06T01:21:58.418023" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:58.418063" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:58.346664" elapsed="0.071434"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:58.418457" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:58.418220" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:58.418198" elapsed="0.000355"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:58.419104" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "A "f "t "[78Ce "[A[78Cr
 "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:58.418749" elapsed="0.000433"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:58.419458" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:58.419244" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:58.419227" elapsed="0.000324"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:58.419582" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:58.422118" elapsed="0.000489"/>
</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-10-06T01:21:58.423876" elapsed="0.000482"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:58.425648" elapsed="0.000491"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:58.420416" elapsed="0.005829"/>
</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-10-06T01:21:58.419894" elapsed="0.006565"/>
</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="PASS" start="2026-10-06T01:21:58.304890" elapsed="0.121683"/>
</kw>
<msg time="2026-10-06T01:21:58.427087" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:58.427157" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:58.304275" elapsed="0.122940"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:58.427555" elapsed="0.000042"/>
</return>
<status status="PASS" start="2026-10-06T01:21:58.427416" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:58.427300" elapsed="0.000412"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:58.428233" elapsed="0.000038"/>
</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-10-06T01:21:58.428755" elapsed="0.000036"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:58.428856" elapsed="0.000023"/>
</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="PASS" start="2026-10-06T01:21:58.303668" elapsed="0.125322"/>
</kw>
<msg time="2026-10-06T01:21:58.429128" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:58.429193" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:58.301778" elapsed="0.127475"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:58.429722" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:58.429385" elapsed="0.000409"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:58.429357" elapsed="0.000477"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:21:58.301623" elapsed="0.128242"/>
</iter>
<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-10-06T01:21:58.433653" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:58.433533" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:58.433509" elapsed="0.000263"/>
</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-10-06T01:21:58.435348" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:21:58.435218" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:58.435194" elapsed="0.000244"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:21:58.435984" level="INFO">${karaf_connection_index} = 14</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-10-06T01:21:58.435645" elapsed="0.000374"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:21:58.436569" 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-10-06T01:21:58.436304" elapsed="0.000299"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:21:58.475535" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:21:58.437455" elapsed="0.038301"/>
</kw>
<msg time="2026-10-06T01:21:58.475927" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:21:58.475970" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:58.436847" elapsed="0.039158"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:21:58.548468" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "A "f "t "[78Ce "[A[78Cr
 "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:21:58.476644" elapsed="0.072009"/>
</kw>
<msg time="2026-10-06T01:21:58.548838" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:21:58.548881" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:58.476178" elapsed="0.072761"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:58.549263" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:58.549025" elapsed="0.000327"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:58.549000" elapsed="0.000378"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:21:58.549962" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "A "f "t "[78Ce "[A[78Cr
 "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:21:58.549583" elapsed="0.000459"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:58.550342" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:58.550104" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:58.550087" elapsed="0.000351"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:21:58.550472" elapsed="0.000037"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:21:58.553388" elapsed="0.000518"/>
</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-10-06T01:21:58.555170" elapsed="0.000501"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:21:58.557085" elapsed="0.000326"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:21:58.551429" elapsed="0.006051"/>
</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-10-06T01:21:58.550843" elapsed="0.006754"/>
</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="PASS" start="2026-10-06T01:21:58.434862" elapsed="0.122828"/>
</kw>
<msg time="2026-10-06T01:21:58.557781" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:58.557822" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:58.433992" elapsed="0.123867"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:21:58.558021" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-10-06T01:21:58.557933" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:58.557913" elapsed="0.000190"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:58.558474" elapsed="0.000025"/>
</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-10-06T01:21:58.558881" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:21:58.559003" 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="PASS" start="2026-10-06T01:21:58.433106" elapsed="0.125988"/>
</kw>
<msg time="2026-10-06T01:21:58.559182" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:21:58.559222" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:58.430239" elapsed="0.129018"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:58.559565" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:21:58.559345" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:21:58.559327" elapsed="0.000309"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:21:58.430032" elapsed="0.129626"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:21:58.131972" elapsed="0.427736"/>
</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-10-06T01:21:58.129819" elapsed="0.429947"/>
</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-10-06T01:21:58.127909" elapsed="0.431912"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:21:58.127510" elapsed="0.432356"/>
</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-10-06T01:21:58.126507" elapsed="0.433410"/>
</kw>
<kw name="Check Ovsdb Shards Status After Cluster Event" owner="ClusterOvsdb">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:21:58.568602" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:21:58.568371" elapsed="0.000267">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:21:58.567967" elapsed="0.000800">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:21:58.568817" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:21:58.565123" elapsed="0.003738"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:21:58.564756" elapsed="0.004190">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:58.569167" elapsed="0.000020"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:58.569404" elapsed="0.000023"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:58.569620" elapsed="0.000021"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:21:58.561061" elapsed="0.008678">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:21:59.587713" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:21:59.587165" elapsed="0.000633">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:21:59.586244" elapsed="0.001801">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:21:59.588156" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:21:59.579781" elapsed="0.008472"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:21:59.578903" elapsed="0.009563">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:59.589109" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:59.589614" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:21:59.590118" elapsed="0.000062"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:21:59.570564" elapsed="0.019883">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:00.609083" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:00.608551" elapsed="0.000613">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:00.607620" elapsed="0.001810">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:00.609544" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:00.601112" elapsed="0.008527"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:00.600187" elapsed="0.009678">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:00.610380" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:00.610895" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:00.611396" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:00.591335" elapsed="0.020296">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:01.629962" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:01.629429" elapsed="0.000614">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:01.628482" elapsed="0.001822">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:01.630415" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:01.621876" elapsed="0.008636"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:01.620987" elapsed="0.009750">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:01.631233" elapsed="0.000070"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:01.631775" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:01.632253" elapsed="0.000068"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:01.612609" elapsed="0.020008">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:02.651013" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:02.650480" elapsed="0.000614">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:02.649544" elapsed="0.001815">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:02.651472" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:02.642995" elapsed="0.008576"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:02.642094" elapsed="0.009700">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:02.652310" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:02.652823" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:02.653319" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:02.633506" elapsed="0.020046">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:03.671482" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:03.670957" elapsed="0.000605">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:03.670021" elapsed="0.001813">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:03.671946" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:03.663545" elapsed="0.008498"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:03.662571" elapsed="0.009681">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:03.672809" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:03.673312" elapsed="0.000056"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:03.673878" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:03.654409" elapsed="0.019704">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:04.691910" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:04.691389" elapsed="0.000600">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:04.690462" elapsed="0.001782">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:04.692456" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:04.684025" elapsed="0.008533"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:04.683162" elapsed="0.009616">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:04.693290" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:04.693797" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:04.694293" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:04.674865" elapsed="0.019659">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:05.712257" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:05.711731" elapsed="0.000611">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:05.710796" elapsed="0.001791">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:05.712726" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:05.704263" elapsed="0.008566"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:05.703396" elapsed="0.009621">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:05.713539" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:05.714055" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:05.714560" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:05.695375" elapsed="0.019447">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:06.733245" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:06.732711" elapsed="0.000617">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:06.731748" elapsed="0.001823">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:06.733710" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:06.725173" elapsed="0.008639"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:06.724299" elapsed="0.009709">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:06.734525" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:06.735050" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:06.735673" elapsed="0.000080"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:06.715628" elapsed="0.020318">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:07.747536" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:07.747210" elapsed="0.000379">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:07.746606" elapsed="0.001164">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:07.747845" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:07.742421" elapsed="0.005489"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:07.741874" elapsed="0.006160">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:07.748370" elapsed="0.000030"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:07.748699" elapsed="0.000033"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:07.749006" elapsed="0.000031"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:07.736708" elapsed="0.012447">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:08.767409" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:08.766883" elapsed="0.000608">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:08.765947" elapsed="0.001821">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:08.767882" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:08.759445" elapsed="0.008534"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:08.758566" elapsed="0.009632">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:08.768725" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:08.769236" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:08.769742" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:08.750003" elapsed="0.019976">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:09.787707" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:09.787185" elapsed="0.000606">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:09.786254" elapsed="0.001916">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:09.788284" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:09.779621" elapsed="0.008762"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:09.778785" elapsed="0.009788">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:09.789092" elapsed="0.000067"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:09.789596" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:09.790099" elapsed="0.000072"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:09.770809" elapsed="0.019549">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:10.808234" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:10.807720" elapsed="0.000593">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:10.806787" elapsed="0.001749">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:10.808641" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:10.800290" elapsed="0.008478"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:10.799424" elapsed="0.009536">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:10.809466" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:10.809969" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:10.810465" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:10.791030" elapsed="0.019694">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:11.828019" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:11.827496" elapsed="0.000622">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:11.826529" elapsed="0.001819">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:11.828453" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:11.820031" elapsed="0.008514"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:11.819208" elapsed="0.009552">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:11.829384" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:11.829897" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:11.830391" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:11.811389" elapsed="0.019235">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:12.848883" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:12.848362" elapsed="0.000600">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:12.847430" elapsed="0.001783">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:12.849323" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:12.840979" elapsed="0.008441"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:12.839959" elapsed="0.009650">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:12.850160" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:12.850637" elapsed="0.000078"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:12.851157" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:12.831343" elapsed="0.020046">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:13.868563" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:13.868044" elapsed="0.000593">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:13.867138" elapsed="0.001757">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:13.869000" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:13.860625" elapsed="0.008492"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:13.859815" elapsed="0.009494">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:13.869814" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:13.870309" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:13.870810" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:13.852040" elapsed="0.019000">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:14.889005" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:14.888473" elapsed="0.000631">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:14.887502" elapsed="0.001829">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:14.889435" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:14.880809" elapsed="0.008720"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:14.879946" elapsed="0.009805">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:14.890268" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:14.890783" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:14.891284" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:14.871811" elapsed="0.019709">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:15.909075" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:15.908520" elapsed="0.000635">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:15.907580" elapsed="0.001810">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:15.909511" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:15.901048" elapsed="0.008560"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:15.900182" elapsed="0.009672">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:15.910440" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:15.910952" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:15.911447" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:15.892258" elapsed="0.019449">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:16.932398" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:16.931868" elapsed="0.000613">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:16.930922" elapsed="0.001830">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:16.932864" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:16.924392" elapsed="0.008570"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:16.923498" elapsed="0.009792">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:16.933811" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:16.934341" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:16.934844" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:16.912499" elapsed="0.022603">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:17.952304" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:17.951782" elapsed="0.000598">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:17.950857" elapsed="0.001750">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:17.952754" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:17.944401" elapsed="0.008452"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:17.943535" elapsed="0.009532">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:17.953558" elapsed="0.000045"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:17.954079" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:17.954546" elapsed="0.000046"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:17.935787" elapsed="0.019038">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:18.972616" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:18.972130" elapsed="0.000599">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:18.971189" elapsed="0.001858">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:18.973159" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:18.964717" elapsed="0.008537"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:18.963848" elapsed="0.009591">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:18.973948" elapsed="0.000065"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:18.974442" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:18.974942" elapsed="0.000171"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:18.955467" elapsed="0.019844">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:19.992848" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:19.992328" elapsed="0.000599">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:19.991302" elapsed="0.001884">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:19.993294" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:19.984841" elapsed="0.008550"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:19.984002" elapsed="0.009579">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:19.994126" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:19.994600" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:19.995131" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:19.976039" elapsed="0.019325">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:21.013718" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:21.013192" elapsed="0.000617">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:21.012242" elapsed="0.001847">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:21.014199" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:21.005557" elapsed="0.008739"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:21.004711" elapsed="0.009775">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:21.015024" elapsed="0.000133"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:21.015604" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:21.016175" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:20.996143" elapsed="0.020265">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:22.034236" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:22.033674" elapsed="0.000643">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:22.032771" elapsed="0.001936">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:22.034824" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:22.026273" elapsed="0.008675"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:22.025398" elapsed="0.009746">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:22.035642" elapsed="0.000094"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:22.036207" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:22.036709" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:22.017212" elapsed="0.019756">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:23.055501" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:23.055004" elapsed="0.000577">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:23.054075" elapsed="0.001776">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:23.055984" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:23.047410" elapsed="0.008673"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:23.046515" elapsed="0.009761">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:23.056801" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:23.057342" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:23.057885" elapsed="0.000068"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:23.037822" elapsed="0.020317">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:24.075859" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:24.075322" elapsed="0.000642">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:24.074398" elapsed="0.001807">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:24.076316" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:24.067917" elapsed="0.008565"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:24.067054" elapsed="0.009652">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:24.077259" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:24.078012" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:24.078492" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:24.058963" elapsed="0.019793">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:25.096926" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:25.096370" elapsed="0.000642">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:25.095434" elapsed="0.001820">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:25.097363" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:25.088906" elapsed="0.008615"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:25.088031" elapsed="0.009718">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:25.098284" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:25.098797" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:25.099292" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:25.079479" elapsed="0.020045">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:26.117164" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:26.116617" elapsed="0.000629">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:26.115718" elapsed="0.001765">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:26.117592" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:26.109183" elapsed="0.008537"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:26.108313" elapsed="0.009626">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:26.118432" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:26.118955" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:26.119426" elapsed="0.000046"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:26.100247" elapsed="0.019405">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:27.138158" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:27.137590" elapsed="0.000651">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:27.136618" elapsed="0.001865">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:27.138591" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:27.130008" elapsed="0.008711"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:27.129007" elapsed="0.009933">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:27.139436" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:27.139971" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:27.140447" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:27.120464" elapsed="0.020242">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:28.158580" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:28.158080" elapsed="0.000581">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:28.157142" elapsed="0.001816">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:28.159069" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:28.150425" elapsed="0.008741"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:28.149559" elapsed="0.009795">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:28.159896" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:28.160380" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:28.160894" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:28.141465" elapsed="0.019662">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:29.179377" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:29.178875" elapsed="0.000581">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:29.177935" elapsed="0.001792">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:29.179862" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:29.171342" elapsed="0.008620"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:29.170455" elapsed="0.009801">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:29.180781" elapsed="0.000068"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:29.181286" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:29.181790" elapsed="0.000069"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:29.162003" elapsed="0.020044">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:30.193417" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:30.193091" elapsed="0.000382">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:30.192503" elapsed="0.001138">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:30.193734" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:30.188452" elapsed="0.005362"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:30.187931" elapsed="0.006004">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:30.194255" elapsed="0.000029"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:30.194558" elapsed="0.000031"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:30.194885" elapsed="0.000030"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:30.182805" elapsed="0.012243">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:31.213962" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:31.213400" elapsed="0.000643">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:31.212445" elapsed="0.001840">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:31.214395" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:31.205562" elapsed="0.008931"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:31.204675" elapsed="0.010036">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:31.215258" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:31.215868" elapsed="0.000056"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:31.216352" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:31.195876" elapsed="0.020845">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:32.234435" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:32.233936" elapsed="0.000581">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:32.233000" elapsed="0.001808">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:32.234922" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:32.226515" elapsed="0.008504"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:32.225654" elapsed="0.009557">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:32.235737" elapsed="0.000065"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:32.236244" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:32.236769" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:32.217530" elapsed="0.019474">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:33.255390" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:33.254881" elapsed="0.000591">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:33.253956" elapsed="0.001805">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:33.255877" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:33.247260" elapsed="0.008714"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:33.246391" elapsed="0.009771">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:33.256654" elapsed="0.000096"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:33.257192" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:33.257663" elapsed="0.000098"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:33.237816" elapsed="0.020130">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:34.275850" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:34.275295" elapsed="0.000638">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:34.274328" elapsed="0.001847">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:34.276403" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:34.267644" elapsed="0.008861"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:34.266828" elapsed="0.009919">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:34.277251" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:34.277786" elapsed="0.000054"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:34.278290" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:34.258736" elapsed="0.019786">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:35.296624" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:35.296131" elapsed="0.000679">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:35.295196" elapsed="0.001856">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:35.297160" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:35.288611" elapsed="0.008645"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:35.287791" elapsed="0.009673">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:35.298012" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:35.298491" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:35.299036" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:35.279318" elapsed="0.019951">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:36.317275" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:36.316781" elapsed="0.000573">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:36.315860" elapsed="0.001731">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:36.317740" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:36.309304" elapsed="0.008537"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:36.308456" elapsed="0.009576">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:36.318631" elapsed="0.000094"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:36.319173" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:36.319813" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:36.300446" elapsed="0.019601">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:37.338712" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:37.338131" elapsed="0.000671">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:37.337157" elapsed="0.001908">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:37.339192" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:37.330208" elapsed="0.009084"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:37.329325" elapsed="0.010160">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:37.340115" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:37.340612" elapsed="0.000095"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:37.341141" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:37.320879" elapsed="0.020497">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:38.358846" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:38.358310" elapsed="0.000614">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:38.357385" elapsed="0.001773">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:38.359264" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:38.350870" elapsed="0.008489"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:38.350018" elapsed="0.009526">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:38.360189" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:38.360712" elapsed="0.000053"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:38.361186" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:38.342132" elapsed="0.019283">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:39.379954" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:39.379401" elapsed="0.000634">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:39.378474" elapsed="0.001944">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:39.380528" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:39.371991" elapsed="0.008633"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:39.371098" elapsed="0.009766">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:39.381355" elapsed="0.000045"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:39.381878" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:39.382342" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:39.362516" elapsed="0.020053">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:40.400210" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:40.399707" elapsed="0.000585">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:40.398775" elapsed="0.001776">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:40.400717" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:40.392258" elapsed="0.008562"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:40.391400" elapsed="0.009608">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:40.401514" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:40.402050" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:40.402518" elapsed="0.000046"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:40.383378" elapsed="0.019420">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:41.424070" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:41.423515" elapsed="0.000637">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:41.422430" elapsed="0.001962">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:41.424611" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:41.415436" elapsed="0.009310"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:41.414522" elapsed="0.010417">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:41.425532" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:41.426071" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:41.426544" elapsed="0.000066"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:41.403544" elapsed="0.023280">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:42.444624" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:42.444105" elapsed="0.000629">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:42.443179" elapsed="0.001803">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:42.445092" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:42.436653" elapsed="0.008537"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:42.435730" elapsed="0.009647">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:42.445926" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:42.446404" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:42.446919" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:42.427595" elapsed="0.019556">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:43.465281" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:43.464776" elapsed="0.000584">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:43.463855" elapsed="0.001764">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:43.465759" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:43.457387" elapsed="0.008473"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:43.456429" elapsed="0.009622">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:43.466594" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:43.467112" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:43.467599" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:43.447973" elapsed="0.019887">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:44.485994" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:44.485366" elapsed="0.000710">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:44.484404" elapsed="0.001916">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:44.486430" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:44.477669" elapsed="0.008857"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:44.476825" elapsed="0.009949">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:44.487287" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:44.487819" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:44.488291" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:44.468817" elapsed="0.019705">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:45.507609" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:45.507077" elapsed="0.000642">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:45.506130" elapsed="0.001845">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:45.508084" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:45.499498" elapsed="0.008682"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:45.498645" elapsed="0.009724">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:45.508922" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:45.509403" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:45.509923" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:45.489340" elapsed="0.020815">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:46.528059" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:46.527526" elapsed="0.000615">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:46.526602" elapsed="0.001778">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:46.528488" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:46.520091" elapsed="0.008523"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:46.519209" elapsed="0.009798">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:46.529526" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:46.530061" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:46.530554" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:46.511066" elapsed="0.019773">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:47.549025" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:47.548470" elapsed="0.000635">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:47.547554" elapsed="0.001788">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:47.549452" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:47.541031" elapsed="0.008546"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:47.540152" elapsed="0.009648">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:47.550299" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:47.550828" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:47.551368" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:47.531652" elapsed="0.019970">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:48.569619" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:48.569087" elapsed="0.000643">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:48.568143" elapsed="0.001829">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:48.570085" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:48.561538" elapsed="0.008644"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:48.560635" elapsed="0.009738">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:48.570915" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:48.571427" elapsed="0.000071"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:48.572140" elapsed="0.000154"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:48.552441" elapsed="0.020081">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:49.590755" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:49.590214" elapsed="0.000620">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:49.589287" elapsed="0.001788">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:49.591183" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:49.582767" elapsed="0.008511"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:49.581895" elapsed="0.009592">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:49.592009" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:49.592506" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:49.593002" elapsed="0.000046"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:49.573268" elapsed="0.019964">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:50.612406" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:50.611883" elapsed="0.000637">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:50.610919" elapsed="0.001903">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:50.612943" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:50.603796" elapsed="0.009255"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:50.602913" elapsed="0.010343">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:50.613863" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:50.614409" elapsed="0.000077"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:50.615043" elapsed="0.000056"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:50.594091" elapsed="0.021236">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:51.633662" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:51.633144" elapsed="0.000629">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:51.632205" elapsed="0.001926">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:51.634246" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:51.625642" elapsed="0.008701"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:51.624753" elapsed="0.009802">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:51.635080" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:51.635581" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:51.636083" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:51.616149" elapsed="0.020166">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:52.654800" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:52.654155" elapsed="0.000773">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:52.653044" elapsed="0.002159">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:52.655322" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:52.645973" elapsed="0.009480"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:52.645113" elapsed="0.010548">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:52.656302" elapsed="0.000053"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:52.656884" elapsed="0.000053"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:52.657386" elapsed="0.000073"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:52.637140" elapsed="0.020518">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:53.676138" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:53.675606" elapsed="0.000613">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:53.674658" elapsed="0.001828">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:53.676599" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:53.668008" elapsed="0.008716"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:53.667124" elapsed="0.009793">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:53.677431" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:53.678058" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:53.678554" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:53.658497" elapsed="0.020317">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:54.696465" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:54.695945" elapsed="0.000602">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:54.695012" elapsed="0.001809">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:54.696933" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:54.688459" elapsed="0.008572"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:54.687595" elapsed="0.009625">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:54.697756" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:54.698235" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:54.698760" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:54.679643" elapsed="0.019352">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:55.718881" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:55.718263" elapsed="0.000718">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:55.717053" elapsed="0.002172">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:55.719368" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:55.709155" elapsed="0.010314"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:55.708274" elapsed="0.011386">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:55.720186" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:55.720709" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:55.721185" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:55.699862" elapsed="0.021575">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:56.739357" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:56.738831" elapsed="0.000608">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:56.737883" elapsed="0.001831">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:56.739827" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:56.731235" elapsed="0.008690"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:56.730251" elapsed="0.009866">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:56.740646" elapsed="0.000074"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:56.741158" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:56.741663" elapsed="0.000076"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:56.722281" elapsed="0.019645">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:57.760333" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:57.759811" elapsed="0.000607">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:57.758877" elapsed="0.001867">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:57.760911" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:57.752260" elapsed="0.008786"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:57.751292" elapsed="0.010065">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:57.762018" elapsed="0.000054"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:57.762540" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:57.763076" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:57.742789" elapsed="0.020606">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:58.786320" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:58.785763" elapsed="0.000644">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:58.784275" elapsed="0.002387">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:58.786801" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:58.776028" elapsed="0.010874"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:58.774949" elapsed="0.012274">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:58.787787" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:58.788276" elapsed="0.000069"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:58.788898" elapsed="0.000077"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:58.764258" elapsed="0.025010">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:22:59.807522" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:22:59.806996" elapsed="0.000606">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:59.806058" elapsed="0.001815">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:22:59.807984" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:22:59.799553" elapsed="0.008528"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:22:59.798674" elapsed="0.009623">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:59.808827" elapsed="0.000062"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:59.809469" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:22:59.809975" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:22:59.790200" elapsed="0.020008">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:00.828372" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:00.827850" elapsed="0.000604">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:00.826911" elapsed="0.001820">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:00.828844" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:00.820160" elapsed="0.008781"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:00.819275" elapsed="0.009853">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:00.829650" elapsed="0.000075"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:00.830160" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:00.830650" elapsed="0.000075"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:00.811102" elapsed="0.019968">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:01.849623" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:01.849101" elapsed="0.000632">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:01.848157" elapsed="0.001820">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:01.850088" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:01.841531" elapsed="0.008653"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:01.840636" elapsed="0.009764">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:01.850946" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:01.851459" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:01.851958" elapsed="0.000046"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:01.831936" elapsed="0.020250">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:02.870719" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:02.870113" elapsed="0.000729">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:02.869147" elapsed="0.001987">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:02.871277" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:02.862598" elapsed="0.008779"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:02.861749" elapsed="0.009816">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:02.872182" elapsed="0.000084"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:02.872789" elapsed="0.000054"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:02.873365" elapsed="0.000053"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:02.853125" elapsed="0.020504">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:03.892279" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:03.891732" elapsed="0.000630">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:03.890771" elapsed="0.001829">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:03.892860" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:03.884236" elapsed="0.008726"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:03.883293" elapsed="0.009862">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:03.893704" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:03.894190" elapsed="0.000080"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:03.894722" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:03.874531" elapsed="0.020428">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:04.912779" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:04.912250" elapsed="0.000610">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:04.911304" elapsed="0.001798">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:04.913234" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:04.904733" elapsed="0.008602"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:04.903865" elapsed="0.009660">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:04.914050" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:04.914557" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:04.915060" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:04.895837" elapsed="0.019484">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:05.936008" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:05.935477" elapsed="0.000611">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:05.934544" elapsed="0.001809">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:05.936462" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:05.927849" elapsed="0.008708"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:05.926972" elapsed="0.009808">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:05.937300" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:05.937811" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:05.938421" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:05.916235" elapsed="0.022416">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:06.956642" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:06.956119" elapsed="0.000645">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:06.955203" elapsed="0.001808">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:06.957121" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:06.948439" elapsed="0.008804"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:06.947571" elapsed="0.009864">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:06.957960" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:06.958463" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:06.958960" elapsed="0.000054"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:06.939561" elapsed="0.019658">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:07.977457" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:07.976933" elapsed="0.000605">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:07.976006" elapsed="0.001807">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:07.977925" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:07.969459" elapsed="0.008564"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:07.968594" elapsed="0.009644">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:07.978765" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:07.979275" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:07.979782" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:07.960108" elapsed="0.019908">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:08.997723" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:08.997193" elapsed="0.000612">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:08.996262" elapsed="0.001990">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:08.998366" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:08.989650" elapsed="0.008814"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:08.988816" elapsed="0.009838">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:08.999209" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:08.999722" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:09.000234" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:08.980850" elapsed="0.019616">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:10.018842" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:10.018309" elapsed="0.000618">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:10.017366" elapsed="0.001823">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:10.019301" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:10.010764" elapsed="0.008636"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:10.009885" elapsed="0.009703">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:10.020147" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:10.020629" elapsed="0.000079"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:10.021159" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:10.001342" elapsed="0.020050">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:11.039072" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:11.038539" elapsed="0.000637">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:11.037596" elapsed="0.001821">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:11.039529" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:11.031072" elapsed="0.008555"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:11.030182" elapsed="0.009669">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:11.040513" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:11.041028" elapsed="0.000085"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:11.041541" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:11.022169" elapsed="0.019636">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:12.059847" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:12.059322" elapsed="0.000605">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:12.058385" elapsed="0.001811">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:12.060308" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:12.051854" elapsed="0.008551"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:12.050968" elapsed="0.009627">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:12.061132" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:12.061609" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:12.062134" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:12.042496" elapsed="0.019871">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:13.079990" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:13.079458" elapsed="0.000642">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:13.078524" elapsed="0.001805">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:13.080437" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:13.071807" elapsed="0.008725"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:13.070968" elapsed="0.009784">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:13.081255" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:13.081758" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:13.082254" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:13.063098" elapsed="0.019386">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:14.100604" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:14.100108" elapsed="0.000605">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:14.099180" elapsed="0.001775">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:14.101099" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:14.092616" elapsed="0.008583"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:14.091773" elapsed="0.009617">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:14.101909" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:14.102415" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:14.102922" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:14.083370" elapsed="0.019823">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:15.121044" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:15.120482" elapsed="0.000643">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:15.119549" elapsed="0.001813">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:15.121469" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:15.112937" elapsed="0.008629"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:15.112088" elapsed="0.009696">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:15.122298" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:15.122812" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:15.123307" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:15.103977" elapsed="0.019562">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:16.141646" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:16.141154" elapsed="0.000607">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:16.140221" elapsed="0.001798">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:16.142130" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:16.133704" elapsed="0.008525"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:16.132834" elapsed="0.009707">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:16.143093" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:16.143580" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:16.144114" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:16.124341" elapsed="0.020011">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:17.162240" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:17.161708" elapsed="0.000613">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:17.160764" elapsed="0.001795">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:17.162673" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:17.154250" elapsed="0.008554"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:17.153372" elapsed="0.009646">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:17.163520" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:17.164050" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:17.164526" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:17.145239" elapsed="0.019549">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:18.183283" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:18.182764" elapsed="0.000598">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:18.181827" elapsed="0.001769">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:18.183737" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:18.175312" elapsed="0.008525"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:18.174421" elapsed="0.009630">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:18.184545" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:18.185074" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:18.185546" elapsed="0.000236"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:18.165541" elapsed="0.020446">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:19.203572" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:19.203075" elapsed="0.000576">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:19.202133" elapsed="0.001789">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:19.204052" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:19.195619" elapsed="0.008534"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:19.194786" elapsed="0.009559">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:19.204871" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:19.205465" elapsed="0.000055"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:19.205979" elapsed="0.000073"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:19.186636" elapsed="0.019605">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:20.225347" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:20.224744" elapsed="0.000699">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:20.223724" elapsed="0.001998">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:20.225840" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:20.217008" elapsed="0.008931"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:20.215946" elapsed="0.010250">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:20.226758" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:20.227280" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:20.227803" elapsed="0.000055"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:20.207154" elapsed="0.020940">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:21.246394" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:21.245867" elapsed="0.000608">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:21.244930" elapsed="0.001942">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:21.246987" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:21.238127" elapsed="0.008982"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:21.237249" elapsed="0.010053">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:21.247822" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:21.248331" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:21.248835" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:21.228962" elapsed="0.020135">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:22.267648" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:22.267144" elapsed="0.000618">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:22.266201" elapsed="0.001811">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:22.268232" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:22.259506" elapsed="0.008829"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:22.258607" elapsed="0.009918">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:22.269060" elapsed="0.000069"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:22.269568" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:22.270092" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:22.249958" elapsed="0.020367">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:23.288520" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:23.287779" elapsed="0.000829">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:23.286670" elapsed="0.002218">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:23.288999" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:23.280143" elapsed="0.008973"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:23.279255" elapsed="0.010054">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:23.289842" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:23.290475" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:23.290984" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:23.271165" elapsed="0.020106">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:24.310022" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:24.309476" elapsed="0.000632">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:24.308449" elapsed="0.002012">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:24.310580" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:24.301517" elapsed="0.009193"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:24.300633" elapsed="0.010276">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:24.311442" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:24.311952" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:24.312534" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:24.292087" elapsed="0.020713">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:25.330471" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:25.329938" elapsed="0.000617">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:25.329015" elapsed="0.001821">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:25.330955" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:25.322553" elapsed="0.008502"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:25.321712" elapsed="0.009556">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:25.331865" elapsed="0.000054"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:25.332382" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:25.332889" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:25.313607" elapsed="0.019514">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:26.351491" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:26.350967" elapsed="0.000604">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:26.350034" elapsed="0.001807">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:26.351953" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:26.343423" elapsed="0.008626"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:26.342440" elapsed="0.009821">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:26.352784" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:26.353281" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:26.353780" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:26.333965" elapsed="0.020044">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:27.371958" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:27.371390" elapsed="0.000652">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:27.370333" elapsed="0.001974">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:27.372417" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:27.363759" elapsed="0.008755"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:27.362895" elapsed="0.009857">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:27.373298" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:27.373814" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:27.374300" elapsed="0.000046"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:27.354858" elapsed="0.019672">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:28.392776" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:28.392250" elapsed="0.000606">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:28.391311" elapsed="0.001782">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:28.393224" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:28.384640" elapsed="0.008683"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:28.383789" elapsed="0.009826">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:28.394147" elapsed="0.000067"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:28.394650" elapsed="0.000080"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:28.395158" elapsed="0.000074"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:28.375329" elapsed="0.020090">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:29.413486" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:29.412958" elapsed="0.000610">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:29.412022" elapsed="0.001824">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:29.413959" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:29.405323" elapsed="0.008756"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:29.404447" elapsed="0.009845">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:29.414821" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:29.415334" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:29.415832" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:29.396323" elapsed="0.019739">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:29.416259" level="FAIL">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>90s</arg>
<arg>1s</arg>
<arg>Check Ovsdb Shards Status</arg>
<arg>${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-10-06T01:21:58.560510" elapsed="90.855971">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<doc>Check Shard Status after some cluster event.</doc>
<status status="FAIL" start="2026-10-06T01:21:58.560113" elapsed="90.856605">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<doc>Create original cluster list and check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:21:58.125961" elapsed="91.291073">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</test>
<test id="s1-s1-s1-t29" name="Check Entity Owner Status After Recover" line="143">
<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-10-06T01:23:29.424371" elapsed="0.000579"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:23:29.423782" elapsed="0.001305"/>
</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-10-06T01:23:29.427404" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:29.427124" elapsed="0.000381"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:29.427075" elapsed="0.000480"/>
</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-10-06T01:23:29.432126" elapsed="0.000028"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:29.431932" elapsed="0.000420"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:29.431894" elapsed="0.000509"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:29.434497" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:29.433738" elapsed="0.000929"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:29.435838" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:29.435113" elapsed="0.000784"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:29.435989" elapsed="0.000061"/>
</return>
<msg time="2026-10-06T01:23:29.436300" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:29.432893" elapsed="0.003460"/>
</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-10-06T01:23:29.441369" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:29.441249" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:29.441218" elapsed="0.000239"/>
</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-10-06T01:23:29.443170" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:29.443045" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:29.443020" elapsed="0.000260"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:29.443851" 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-10-06T01:23:29.443487" elapsed="0.000399"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:29.444380" 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-10-06T01:23:29.444114" elapsed="0.000300"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:29.481455" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:29.445302" elapsed="0.036334"/>
</kw>
<msg time="2026-10-06T01:23:29.481855" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:29.481899" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:29.444631" elapsed="0.037303"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:29.560502" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:29.482729" elapsed="0.077974"/>
</kw>
<msg time="2026-10-06T01:23:29.560877" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:29.560919" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:29.482107" elapsed="0.078848"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:29.561268" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:29.561032" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:29.561011" elapsed="0.000357"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:29.561942" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:29.561553" elapsed="0.000471"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:29.562336" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:29.562087" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:29.562070" elapsed="0.000366"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:29.562468" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:29.565098" elapsed="0.000516"/>
</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-10-06T01:23:29.566904" elapsed="0.000504"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:29.568626" elapsed="0.000636"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:29.563338" elapsed="0.005996"/>
</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-10-06T01:23:29.562794" elapsed="0.006660"/>
</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="PASS" start="2026-10-06T01:23:29.442602" elapsed="0.126930"/>
</kw>
<msg time="2026-10-06T01:23:29.569615" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:29.569656" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:29.441659" elapsed="0.128057"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:29.569882" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:23:29.569791" elapsed="0.000147"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:29.569774" elapsed="0.000187"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:23:29.570367" elapsed="0.000028"/>
</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-10-06T01:23:29.570877" elapsed="0.000031"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:29.570961" 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="PASS" start="2026-10-06T01:23:29.440813" elapsed="0.130250"/>
</kw>
<msg time="2026-10-06T01:23:29.571150" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:29.571189" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:29.437195" elapsed="0.134046"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:29.571537" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:29.571313" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:29.571296" elapsed="0.000314"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:29.436881" elapsed="0.134750"/>
</iter>
<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-10-06T01:23:29.574103" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:29.574018" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:29.574001" elapsed="0.000166"/>
</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-10-06T01:23:29.575305" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:29.575219" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:29.575190" elapsed="0.000178"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:29.575771" level="INFO">${karaf_connection_index} = 12</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-10-06T01:23:29.575510" elapsed="0.000288"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:29.576136" 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-10-06T01:23:29.575962" elapsed="0.000199"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:29.630475" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:29.576776" elapsed="0.054018"/>
</kw>
<msg time="2026-10-06T01:23:29.631030" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:29.631077" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:29.576331" elapsed="0.054783"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:29.709912" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:29.631962" elapsed="0.078475"/>
</kw>
<msg time="2026-10-06T01:23:29.710876" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:29.710970" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:29.631387" elapsed="0.079756"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:29.711932" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:29.711360" elapsed="0.000735"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:29.711309" elapsed="0.000840"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:29.713440" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:29.712574" elapsed="0.001044"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:29.714251" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:29.713793" elapsed="0.000612"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:29.713755" elapsed="0.000702"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:29.714529" elapsed="0.000065"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:29.719261" elapsed="0.000731"/>
</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-10-06T01:23:29.721883" elapsed="0.000708"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:29.724579" elapsed="0.000803"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:29.716729" elapsed="0.008795"/>
</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-10-06T01:23:29.715248" elapsed="0.010471"/>
</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="PASS" start="2026-10-06T01:23:29.574916" elapsed="0.150922"/>
</kw>
<msg time="2026-10-06T01:23:29.725967" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:29.726027" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:29.574324" elapsed="0.151756"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:29.726337" elapsed="0.000041"/>
</return>
<status status="PASS" start="2026-10-06T01:23:29.726189" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:29.726161" elapsed="0.000298"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:29.727090" elapsed="0.000036"/>
</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-10-06T01:23:29.727601" elapsed="0.000034"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:29.727718" elapsed="0.000022"/>
</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="PASS" start="2026-10-06T01:23:29.573719" elapsed="0.154127"/>
</kw>
<msg time="2026-10-06T01:23:29.727971" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:29.728031" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:29.571917" elapsed="0.156167"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:29.728545" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:29.728187" elapsed="0.000431"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:29.728163" elapsed="0.000488"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:29.571776" elapsed="0.156967"/>
</iter>
<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-10-06T01:23:29.732374" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:29.732246" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:29.732202" elapsed="0.000264"/>
</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-10-06T01:23:29.734111" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:29.733987" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:29.733963" elapsed="0.000323"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:29.734883" level="INFO">${karaf_connection_index} = 14</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-10-06T01:23:29.734508" elapsed="0.000412"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:29.735438" 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-10-06T01:23:29.735164" elapsed="0.000310"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:29.772759" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:29.736359" elapsed="0.036722"/>
</kw>
<msg time="2026-10-06T01:23:29.773389" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:29.773456" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:29.735728" elapsed="0.037783"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:29.868408" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:29.774603" elapsed="0.094131"/>
</kw>
<msg time="2026-10-06T01:23:29.868965" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:29.869010" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:29.773855" elapsed="0.095192"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:29.869475" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:29.869154" elapsed="0.000400"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:29.869123" elapsed="0.000457"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:29.870229" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:29.869788" elapsed="0.000526"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:29.870585" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:29.870379" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:29.870362" elapsed="0.000339"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:29.870739" elapsed="0.000036"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:29.873363" elapsed="0.000515"/>
</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-10-06T01:23:29.875157" elapsed="0.000768"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:29.877284" elapsed="0.000489"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:29.871612" elapsed="0.006231"/>
</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-10-06T01:23:29.871063" elapsed="0.006901"/>
</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="PASS" start="2026-10-06T01:23:29.733578" elapsed="0.144466"/>
</kw>
<msg time="2026-10-06T01:23:29.878130" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:29.878170" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:29.732699" elapsed="0.145519"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:29.878382" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:23:29.878293" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:29.878276" elapsed="0.000186"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:29.878912" elapsed="0.000025"/>
</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-10-06T01:23:29.879298" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:29.879368" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:23:29.731781" elapsed="0.147680"/>
</kw>
<msg time="2026-10-06T01:23:29.879548" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:29.879588" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:29.729123" elapsed="0.150500"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:29.879933" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:29.879708" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:29.879691" elapsed="0.000316"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:29.728917" elapsed="0.151112"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:29.436481" elapsed="0.443579"/>
</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-10-06T01:23:29.431124" elapsed="0.448990"/>
</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-10-06T01:23:29.426443" elapsed="0.453724"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:29.425447" elapsed="0.454777"/>
</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-10-06T01:23:29.419229" elapsed="0.461049"/>
</kw>
<kw name="Get Ovsdb Entity Owner Status For One Device" owner="ClusterOvsdb">
<msg time="2026-10-06T01:23:29.884109" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<var>${new_owner}</var>
<var>${new_candidate_list}</var>
<arg>ovsdb://uuid/${ovsdb_uuid}</arg>
<arg>1</arg>
<doc>Check Entity Owner Status and identify owner and successors for an ovs device ${device}. Request is sent to controller ${controller_index}.</doc>
<status status="FAIL" start="2026-10-06T01:23:29.882890" elapsed="0.001254">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_owner}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:29.884355" elapsed="0.000021"/>
</kw>
<doc>Check Entity Owner Status and identify owner and candidate.</doc>
<status status="FAIL" start="2026-10-06T01:23:29.418123" elapsed="0.466380">Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s1-s1-t30" name="Create Bridge Manually and Verify After Recover" line="150">
<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-10-06T01:23:29.886282" elapsed="0.000381"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:23:29.886001" elapsed="0.000730"/>
</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-10-06T01:23:29.888008" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:29.887921" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:29.887903" elapsed="0.000170"/>
</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-10-06T01:23:29.889986" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:29.889902" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:29.889885" elapsed="0.000163"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:29.890976" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:29.890627" elapsed="0.000375"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:29.891448" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:29.891154" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:29.891513" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:23:29.891640" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:29.890264" elapsed="0.001400"/>
</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-10-06T01:23:29.894292" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:29.894190" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:29.894173" elapsed="0.000183"/>
</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-10-06T01:23:29.895476" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:29.895391" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:29.895373" elapsed="0.000199"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:29.895979" 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-10-06T01:23:29.895742" elapsed="0.000262"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:29.896355" 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-10-06T01:23:29.896167" elapsed="0.000213"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:29.931087" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:29.896977" elapsed="0.034309"/>
</kw>
<msg time="2026-10-06T01:23:29.931448" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:29.931491" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:29.896537" elapsed="0.034988"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:30.009734" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:29.932143" elapsed="0.077775"/>
</kw>
<msg time="2026-10-06T01:23:30.010077" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:30.010119" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:29.931715" elapsed="0.078439"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:30.010452" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:30.010240" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:30.010208" elapsed="0.000340"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:30.011096" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:30.010751" elapsed="0.000430"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:30.011457" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:30.011257" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:30.011239" elapsed="0.000312"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:30.011582" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:30.014145" elapsed="0.000494"/>
</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-10-06T01:23:30.015877" elapsed="0.000473"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:30.017548" elapsed="0.000336"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:30.012389" elapsed="0.005563"/>
</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-10-06T01:23:30.011876" elapsed="0.006192"/>
</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="PASS" start="2026-10-06T01:23:29.895106" elapsed="0.123040"/>
</kw>
<msg time="2026-10-06T01:23:30.018243" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:30.018285" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:29.894506" elapsed="0.123814"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:30.018476" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:23:30.018391" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:30.018373" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:23:30.019165" elapsed="0.000025"/>
</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-10-06T01:23:30.019522" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:30.019589" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:23:29.893896" elapsed="0.125794"/>
</kw>
<msg time="2026-10-06T01:23:30.019777" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:30.019817" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:29.892018" elapsed="0.127835"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:30.020140" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:30.019921" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:30.019906" elapsed="0.000324"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:29.891876" elapsed="0.128377"/>
</iter>
<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-10-06T01:23:30.022831" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:30.022743" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:30.022725" elapsed="0.000169"/>
</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-10-06T01:23:30.024005" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:30.023920" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:30.023903" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:30.024451" level="INFO">${karaf_connection_index} = 12</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-10-06T01:23:30.024224" elapsed="0.000252"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:30.024824" 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-10-06T01:23:30.024636" elapsed="0.000213"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:30.060929" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:30.025429" elapsed="0.035704"/>
</kw>
<msg time="2026-10-06T01:23:30.061319" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:30.061361" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:30.025002" elapsed="0.036394"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:30.152299" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:30.062096" elapsed="0.090452"/>
</kw>
<msg time="2026-10-06T01:23:30.152773" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:30.152816" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:30.061596" elapsed="0.091256"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:30.153236" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:30.152949" elapsed="0.000364"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:30.152922" elapsed="0.000417"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:30.153939" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:30.153528" elapsed="0.000498"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:30.154302" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:30.154089" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:30.154072" elapsed="0.000325"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:30.154433" elapsed="0.000037"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:30.157134" elapsed="0.000503"/>
</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-10-06T01:23:30.158899" elapsed="0.000490"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:30.160742" elapsed="0.000312"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:30.155398" elapsed="0.005724"/>
</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-10-06T01:23:30.154847" elapsed="0.006409"/>
</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="PASS" start="2026-10-06T01:23:30.023638" elapsed="0.137699"/>
</kw>
<msg time="2026-10-06T01:23:30.161426" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:30.161467" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:30.023044" elapsed="0.138460"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:30.161663" elapsed="0.000101"/>
</return>
<status status="PASS" start="2026-10-06T01:23:30.161576" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:30.161559" elapsed="0.000262"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:30.162156" elapsed="0.000024"/>
</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-10-06T01:23:30.162482" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:30.162547" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:30.022428" elapsed="0.140207"/>
</kw>
<msg time="2026-10-06T01:23:30.162739" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:30.162780" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:30.020510" elapsed="0.142305"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:30.163107" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:30.162887" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:30.162871" elapsed="0.000307"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:30.020366" elapsed="0.142833"/>
</iter>
<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-10-06T01:23:30.165905" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:30.165818" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:30.165800" elapsed="0.000169"/>
</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-10-06T01:23:30.167076" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:30.166991" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:30.166974" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:30.167529" level="INFO">${karaf_connection_index} = 14</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-10-06T01:23:30.167296" elapsed="0.000258"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:30.167909" 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-10-06T01:23:30.167732" elapsed="0.000201"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:30.225884" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:30.168517" elapsed="0.057544"/>
</kw>
<msg time="2026-10-06T01:23:30.226234" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:30.226277" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:30.168087" elapsed="0.058225"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:30.309918" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:30.226925" elapsed="0.083232"/>
</kw>
<msg time="2026-10-06T01:23:30.310330" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:30.310371" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:30.226478" elapsed="0.083927"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:30.310716" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:30.310480" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:30.310459" elapsed="0.000354"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:30.311343" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:30.310993" elapsed="0.000430"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:30.311700" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:30.311485" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:30.311468" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:30.311827" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:30.314293" elapsed="0.000496"/>
</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-10-06T01:23:30.316115" elapsed="0.000477"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:30.317792" elapsed="0.000313"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:30.312610" elapsed="0.005561"/>
</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-10-06T01:23:30.312099" elapsed="0.006205"/>
</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="PASS" start="2026-10-06T01:23:30.166731" elapsed="0.151651"/>
</kw>
<msg time="2026-10-06T01:23:30.318469" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:30.318509" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:30.166116" elapsed="0.152427"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:30.318716" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:23:30.318612" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:30.318595" elapsed="0.000201"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:30.319114" elapsed="0.000024"/>
</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-10-06T01:23:30.319429" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:30.319495" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:30.165503" elapsed="0.154077"/>
</kw>
<msg time="2026-10-06T01:23:30.319662" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:30.319733" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:30.163474" elapsed="0.156293"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:30.320054" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:30.319837" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:30.319821" elapsed="0.000304"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:30.163334" elapsed="0.156812"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:29.891729" elapsed="0.428444"/>
</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-10-06T01:23:29.889595" elapsed="0.430647"/>
</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-10-06T01:23:29.887641" elapsed="0.432690"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:29.886882" elapsed="0.433493"/>
</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-10-06T01:23:29.885641" elapsed="0.434784"/>
</kw>
<kw name="Create Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:30.324163" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:30.323930" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:30.323913" elapsed="0.000341"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:30.324578" 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-10-06T01:23:30.324671" 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-10-06T01:23:30.324446" elapsed="0.000430"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:30.325370" level="INFO">Attempting to execute command "sudo ovs-vsctl add-br br-s1" on remote system "10.30.170.234" 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-10-06T01:23:30.325064" elapsed="0.000350"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:30.325912" level="INFO">${conn_id} = 143</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-10-06T01:23:30.325588" elapsed="0.000349"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:23:30.326799" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:23:30.326869" 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-10-06T01:23:30.326511" elapsed="0.000381"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:30.327040" elapsed="0.000402"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:23:30.328240" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:23:31.060852" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:23:30 UTC 2026

  System load:  0.17               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:21:54 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:23:30.327991" elapsed="0.733016"/>
</kw>
<msg time="2026-10-06T01:23:31.061092" 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-10-06T01:23:30.327605" elapsed="0.733570"/>
</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-10-06T01:23:30.326131" elapsed="0.735170"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:23:31.061832" level="INFO">Executing command 'sudo ovs-vsctl add-br br-s1'.</msg>
<msg time="2026-10-06T01:23:31.125936" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:23:31.126222" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:23:31.126344" level="INFO">${stderr} = </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-10-06T01:23:31.061586" elapsed="0.064809"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:31.126849" elapsed="0.000511"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.128496" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.127884" elapsed="0.000700"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:31.129042" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:31.128796" elapsed="0.000349"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.128728" elapsed="0.000466"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:23:31.129512" elapsed="0.000061"/>
</return>
<status status="PASS" start="2026-10-06T01:23:31.129329" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.129296" elapsed="0.000425"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:31.129901" elapsed="0.000033"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:31.131560" elapsed="0.000805"/>
</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-10-06T01:23:31.132847" elapsed="0.000341"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:31.133628" elapsed="0.000256"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:31.130593" elapsed="0.003445"/>
</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-10-06T01:23:30.323486" elapsed="0.810799"/>
</kw>
<msg time="2026-10-06T01:23:31.134405" 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-10-06T01:23:30.322955" elapsed="0.811578"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:23:30.322523" elapsed="0.812228"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.135993" level="INFO">${dictionary_operational} = {'br-s1': '5'}</msg>
<var>${dictionary_operational}</var>
<arg>br-s1=5</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:23:31.135278" elapsed="0.000772"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.137154" level="INFO">${dictionary_config} = {'br-s1': '0'}</msg>
<var>${dictionary_config}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:23:31.136503" elapsed="0.000705"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.148018" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:31.147187" elapsed="0.000890"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.149100" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:31.148441" elapsed="0.000713"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:31.149268" elapsed="0.000067"/>
</return>
<msg time="2026-10-06T01:23:31.149563" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:31.146324" elapsed="0.003289"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.155215" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:23:31.154840" elapsed="0.000427"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:31.155326" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:23:31.155499" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:31.154132" elapsed="0.001401"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.157171" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.156858" elapsed="0.000387"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.157832" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.157506" elapsed="0.000382"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:31.172136" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:23:31.172444" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '144'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:23:31.172714" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:23:31.158317" elapsed="0.014455"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.157978" elapsed="0.014881"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.173294" elapsed="0.000150"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.172918" elapsed="0.000650"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.157953" elapsed="0.015681"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.176599" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.175836" elapsed="0.000898"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.175265" elapsed="0.001541"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.175201" elapsed="0.001656"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.178162" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.177524" elapsed="0.000757"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.176971" elapsed="0.001379"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.176937" elapsed="0.001463"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.179623" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:31.178819" elapsed="0.000901"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.180347" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.179868" elapsed="0.000597"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.181508" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:31.180895" elapsed="0.000667"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.180514" elapsed="0.001120"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.179831" elapsed="0.001887"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.183055" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:31.182099" elapsed="0.001015"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.183779" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.183288" elapsed="0.000608"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.184936" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:31.184316" elapsed="0.000675"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.183946" elapsed="0.001117"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.183222" elapsed="0.001886"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:31.185446" elapsed="0.000707"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:23:31.187159" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:31.186529" elapsed="0.000686"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:23:31.187579" elapsed="0.000559"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:23:31.174442" elapsed="0.013846"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:23:31.188614" elapsed="0.000055"/>
</return>
<status status="PASS" start="2026-10-06T01:23:31.188428" elapsed="0.000348"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.188391" elapsed="0.000437"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.189137" elapsed="0.000045"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:23:31.189302" elapsed="0.000032"/>
</return>
<msg time="2026-10-06T01:23:31.189815" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:23:31.155980" elapsed="0.033895"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:23:31.189975" elapsed="0.000056"/>
</return>
<msg time="2026-10-06T01:23:31.190269" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:23:31.153161" elapsed="0.037167"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.192794" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:31.192041" elapsed="0.000890"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:23:31.191583" elapsed="0.001428"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:23:31.191350" elapsed="0.001725"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:23:31.190826" elapsed="0.002356"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:31.150015" elapsed="0.043262"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.196989" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:31.196595" elapsed="0.000429"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:31.197081" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:23:31.197268" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:31.196130" elapsed="0.001171"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.198913" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.198586" elapsed="0.000386"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.199551" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.199246" elapsed="0.000360"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:31.217570" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0196abtsaqd8g4mpvcap0t4mk0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:23:31.217794" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:23:31.217940" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:23:31.200026" elapsed="0.017950"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.199710" elapsed="0.018331"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.218356" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.218082" elapsed="0.000359"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.199667" elapsed="0.018803"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.220387" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.219876" elapsed="0.000571"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.219505" elapsed="0.000987"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.219479" elapsed="0.001045"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.221337" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.220944" elapsed="0.000450"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.220593" elapsed="0.000844"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.220573" elapsed="0.000896"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.222248" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:31.221735" elapsed="0.000550"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.222662" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.222375" elapsed="0.000384"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.223390" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:31.223008" elapsed="0.000415"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.222790" elapsed="0.000678"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.222352" elapsed="0.001144"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.224217" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:31.223749" elapsed="0.000520"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.224639" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.224359" elapsed="0.000374"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.225363" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:31.224983" elapsed="0.000477"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.224764" elapsed="0.000749"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.224336" elapsed="0.001204"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:31.225760" elapsed="0.000410"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:23:31.226754" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:31.226405" elapsed="0.000383"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:23:31.226997" elapsed="0.000310"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:23:31.218979" elapsed="0.008408"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:23:31.227590" elapsed="0.000042"/>
</return>
<status status="PASS" start="2026-10-06T01:23:31.227474" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.227451" elapsed="0.000278"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.227929" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:23:31.228018" elapsed="0.000019"/>
</return>
<msg time="2026-10-06T01:23:31.228333" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:23:31.197725" elapsed="0.030644"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:23:31.228433" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:23:31.228602" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:23:31.195544" elapsed="0.033090"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.230094" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:31.229644" elapsed="0.000534"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:23:31.229423" elapsed="0.000818"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:23:31.229273" elapsed="0.001009"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:23:31.228938" elapsed="0.001410"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:31.193463" elapsed="0.036928"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.233937" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:31.233541" elapsed="0.000431"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:31.234030" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:23:31.234196" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:31.233081" elapsed="0.001161"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.235856" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.235528" elapsed="0.000386"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.236714" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.236172" elapsed="0.000600"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:31.255141" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0gusd5pkzmwglcb3p20r9r8j10.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:23:31.255301" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:23:31.255420" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:23:31.237168" elapsed="0.018286"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.236858" elapsed="0.018649"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.255780" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.255541" elapsed="0.000369"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.236834" elapsed="0.019107"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.257796" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.257320" elapsed="0.000536"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.256971" elapsed="0.000928"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.256946" elapsed="0.000985"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.258741" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.258346" elapsed="0.000453"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.258002" elapsed="0.000840"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.257981" elapsed="0.000893"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.259601" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:31.259109" elapsed="0.000527"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.260031" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.259747" elapsed="0.000358"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.260758" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:31.260370" elapsed="0.000423"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.260136" elapsed="0.000703"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.259723" elapsed="0.001144"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.261588" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:31.261102" elapsed="0.000521"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.262017" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.261733" elapsed="0.000357"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.262739" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:31.262355" elapsed="0.000419"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.262121" elapsed="0.000698"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.261709" elapsed="0.001140"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:31.263041" elapsed="0.000423"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:23:31.264010" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:31.263702" elapsed="0.000343"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:23:31.264265" elapsed="0.000292"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:23:31.256408" elapsed="0.008227"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:23:31.264859" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:23:31.264745" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.264720" elapsed="0.000247"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.265161" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:23:31.265266" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:23:31.265563" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:23:31.234654" elapsed="0.030943"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:23:31.265660" elapsed="0.000056"/>
</return>
<msg time="2026-10-06T01:23:31.265851" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:23:31.232491" elapsed="0.033393"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.267306" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:31.266867" elapsed="0.000522"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:23:31.266629" elapsed="0.000809"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:23:31.266489" elapsed="0.001028"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:23:31.266161" elapsed="0.001427"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:31.230501" elapsed="0.037129"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:31.149761" elapsed="0.117905"/>
</for>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:23:31.145009" elapsed="0.122744"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:23:31.137777" elapsed="0.130044"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.275765" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:31.275284" elapsed="0.000517"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.276407" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:31.276011" elapsed="0.000430"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:31.276499" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:23:31.276674" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:31.274776" elapsed="0.001953"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.280337" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:23:31.279945" elapsed="0.000427"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:31.280429" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:23:31.280598" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:31.279481" elapsed="0.001149"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.282368" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.281933" elapsed="0.000496"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.283015" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.282710" elapsed="0.000360"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:31.292821" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:23:31.292986" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '5505'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;c31ebfa2-624b-423b-b118-add4b24bc922&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;f96ec6f2-d93b-4281-9e4e-46fbfd8d0b2b&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;209ababd-0735-4d17-9bd1-80cc348df6fa&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;a2:bf:1e:c3:3b:42&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;6&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:a2:bf:1e:c3:3b:42&lt;/datapath-id&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:23:31.293182" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:23:31.283519" elapsed="0.009689"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.283154" elapsed="0.010110"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.293446" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.293289" elapsed="0.000235"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.283131" elapsed="0.010428"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.295487" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;c31ebfa2-624b-423b-b118-add4b24bc922&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;f96ec6f2-d93b-4281-9e4e-46fbfd8d0b2b&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;209ababd-0735-4d17-9bd1-80cc348df6fa&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;a2:bf:1e:c3:3b:42&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;6&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:a2:bf:1e:c3:3b:42&lt;/datapath-id&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.294936" elapsed="0.000695"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.294582" elapsed="0.001114"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.294556" elapsed="0.001176"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.296546" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.296139" elapsed="0.000465"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.295805" elapsed="0.000900"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.295784" elapsed="0.000957"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.297490" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:31.296987" elapsed="0.000540"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.297929" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.297618" elapsed="0.000385"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.298642" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:31.298268" elapsed="0.000428"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.298034" elapsed="0.000711"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.297594" elapsed="0.001179"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.299502" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:31.299009" elapsed="0.000529"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.299936" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.299627" elapsed="0.000382"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.300874" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:31.300477" elapsed="0.000434"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.300227" elapsed="0.000730"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.299603" elapsed="0.001382"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:31.301183" elapsed="0.000438"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:23:31.302176" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:31.301860" elapsed="0.000350"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:23:31.302436" elapsed="0.000317"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:23:31.294080" elapsed="0.008752"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:23:31.303031" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-10-06T01:23:31.302918" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.302895" elapsed="0.000247"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.303353" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:23:31.303443" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:23:31.303839" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1&lt;/node-id...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:23:31.281059" elapsed="0.022820"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:23:31.303944" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:23:31.304116" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1&lt;/node-id...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:23:31.278897" elapsed="0.025257"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.305602" level="INFO">Item found from container 5 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:31.305153" elapsed="0.000587"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:23:31.304932" elapsed="0.000860"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:23:31.304788" elapsed="0.001042"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:23:31.304452" elapsed="0.001442"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:31.276942" elapsed="0.028994"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.309568" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:31.309177" elapsed="0.000416"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:31.309667" elapsed="0.000044"/>
</return>
<msg time="2026-10-06T01:23:31.309812" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:31.308727" elapsed="0.001108"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.310998" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.310773" elapsed="0.000266"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.311459" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.311225" elapsed="0.000274"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:31.327800" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0196abtsaqd8g4mpvcap0t4mk0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:23:31.328051" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2497'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"c31ebfa2-624b-423b-b118-add4b24bc922","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"f96ec6f2-d93b-4281-9e4e-46fbfd8d0b2b","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"209ababd-0735-4d17-9bd1-80cc348df6fa","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"a2:bf:1e:c3:3b:42","ovsdb:ofport":65534,"ovsdb:ifindex":6}],"ovsdb:datapath-id":"00:00:a2:bf:1e:c3:3b:42"},{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']"}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:23:31.328245" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:23:31.311804" elapsed="0.016479"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.311560" elapsed="0.016790"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.328657" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.328392" elapsed="0.000374"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.311544" elapsed="0.017251"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.330773" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"c31ebfa2-624b-423b-b118-add4b24bc922","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"f96ec6f2-d93b-4281-9e4e-46fbfd8d0b2b","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"209ababd-0735-4d17-9bd1-80cc348df6fa","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"a2:bf:1e:c3:3b:42","ovsdb:ofport":65534,"ovsdb:ifindex":6}],"ovsdb:datapath-id":"00:00:a2:bf:1e:c3:3b:42"},{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']"}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.330197" elapsed="0.000722"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.329847" elapsed="0.001118"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.329821" elapsed="0.001176"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.331819" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.331419" elapsed="0.000457"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.331068" elapsed="0.000851"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.331047" elapsed="0.000903"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.332749" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:31.332202" elapsed="0.000582"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.333163" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.332874" elapsed="0.000379"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.334168" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:31.333506" elapsed="0.000696"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.333287" elapsed="0.000982"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.332851" elapsed="0.001448"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.335038" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:31.334537" elapsed="0.000537"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.335463" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.335163" elapsed="0.000375"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.336173" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:31.335805" elapsed="0.000402"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.335568" elapsed="0.000703"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.335140" elapsed="0.001160"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:31.336500" elapsed="0.000437"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:23:31.337502" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:31.337155" elapsed="0.000381"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:23:31.337768" elapsed="0.000297"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:23:31.329308" elapsed="0.008839"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:23:31.338365" elapsed="0.000044"/>
</return>
<status status="PASS" start="2026-10-06T01:23:31.338245" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.338209" elapsed="0.000277"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.338700" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:23:31.338791" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:23:31.339142" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:23:31.310129" elapsed="0.029050"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:23:31.339258" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:23:31.339430" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:23:31.308111" elapsed="0.031352"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.340983" level="INFO">Item found from container 5 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:31.340499" elapsed="0.000587"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:23:31.340274" elapsed="0.000863"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:23:31.340102" elapsed="0.001075"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:23:31.339776" elapsed="0.001487"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:31.306047" elapsed="0.035306"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.344969" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:31.344568" elapsed="0.000436"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:31.345062" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:23:31.345246" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:31.344107" elapsed="0.001173"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.346962" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.346621" elapsed="0.000382"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.347444" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.347215" elapsed="0.000269"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:31.363189" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0gusd5pkzmwglcb3p20r9r8j10.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:23:31.363344" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2497'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"c31ebfa2-624b-423b-b118-add4b24bc922","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"f96ec6f2-d93b-4281-9e4e-46fbfd8d0b2b","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"209ababd-0735-4d17-9bd1-80cc348df6fa","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"a2:bf:1e:c3:3b:42","ovsdb:ofport":65534,"ovsdb:ifindex":6}],"ovsdb:datapath-id":"00:00:a2:bf:1e:c3:3b:42"},{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']"}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:23:31.363446" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:23:31.347785" elapsed="0.015685"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.347544" elapsed="0.015965"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.363709" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.363534" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.347528" elapsed="0.016262"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.365083" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"c31ebfa2-624b-423b-b118-add4b24bc922","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"f96ec6f2-d93b-4281-9e4e-46fbfd8d0b2b","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"209ababd-0735-4d17-9bd1-80cc348df6fa","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"a2:bf:1e:c3:3b:42","ovsdb:ofport":65534,"ovsdb:ifindex":6}],"ovsdb:datapath-id":"00:00:a2:bf:1e:c3:3b:42"},{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']"}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.364722" elapsed="0.000450"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.364466" elapsed="0.000739"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.364448" elapsed="0.000780"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.365817" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.365531" elapsed="0.000328"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.365294" elapsed="0.000596"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.365278" elapsed="0.000635"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.366586" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:31.366084" elapsed="0.000527"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.366900" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.366691" elapsed="0.000262"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.367413" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:31.367132" elapsed="0.000305"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.366976" elapsed="0.000494"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.366659" elapsed="0.000832"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.368014" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:31.367659" elapsed="0.000380"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.368318" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.368103" elapsed="0.000269"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.368831" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:31.368551" elapsed="0.000304"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:31.368395" elapsed="0.000493"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.368086" elapsed="0.000822"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:31.369049" elapsed="0.000307"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:23:31.369748" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:31.369512" elapsed="0.000260"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:23:31.369920" elapsed="0.000210"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:23:31.364110" elapsed="0.006075"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:23:31.370342" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:23:31.370259" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.370230" elapsed="0.000191"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.370561" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:23:31.370625" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:23:31.370892" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:23:31.345714" elapsed="0.025204"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:23:31.370963" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:23:31.371087" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:23:31.343512" elapsed="0.027599"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.372139" level="INFO">Item found from container 5 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:31.371832" elapsed="0.000379"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:23:31.371659" elapsed="0.000601"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:23:31.371554" elapsed="0.000734"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:23:31.371328" elapsed="0.001008"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:31.341472" elapsed="0.030926"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:31.276793" elapsed="0.095633"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:23:31.274068" elapsed="0.098406"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:23:31.268103" elapsed="0.104420"/>
</kw>
<doc>Create bridge br-s1 using OVS command and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:23:30.322139" elapsed="1.050444"/>
</kw>
<doc>Create bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="PASS" start="2026-10-06T01:23:29.884994" elapsed="1.487718"/>
</test>
<test id="s1-s1-s1-t31" name="Add Port Manually and Verify After Recover" line="154">
<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-10-06T01:23:31.374394" elapsed="0.000201"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:23:31.374133" elapsed="0.000513"/>
</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-10-06T01:23:31.375586" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:31.375499" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.375480" elapsed="0.000169"/>
</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-10-06T01:23:31.377881" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:31.377795" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.377778" elapsed="0.000165"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.378957" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:31.378515" elapsed="0.000470"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.379422" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:31.379135" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:31.379487" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:23:31.379612" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:31.378147" elapsed="0.001489"/>
</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-10-06T01:23:31.382211" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:31.382126" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.382109" elapsed="0.000180"/>
</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-10-06T01:23:31.383432" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:31.383348" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.383330" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:31.383887" 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-10-06T01:23:31.383638" elapsed="0.000273"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:31.384262" 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-10-06T01:23:31.384075" elapsed="0.000212"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:31.419256" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:31.384874" elapsed="0.034572"/>
</kw>
<msg time="2026-10-06T01:23:31.419615" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:31.419657" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:31.384443" elapsed="0.035299"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:31.501954" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:31.420349" elapsed="0.081783"/>
</kw>
<msg time="2026-10-06T01:23:31.502350" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:31.502392" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:31.419912" elapsed="0.082515"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.502748" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.502502" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.502482" elapsed="0.000362"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.503384" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.503024" elapsed="0.000439"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.503742" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.503526" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.503509" elapsed="0.000329"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:31.503868" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:31.506378" elapsed="0.000500"/>
</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-10-06T01:23:31.508141" elapsed="0.000491"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:31.509865" elapsed="0.000317"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:31.504669" elapsed="0.005591"/>
</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-10-06T01:23:31.504151" elapsed="0.006232"/>
</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="PASS" start="2026-10-06T01:23:31.383073" elapsed="0.127387"/>
</kw>
<msg time="2026-10-06T01:23:31.510542" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:31.510581" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:31.382438" elapsed="0.128176"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:31.510785" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:23:31.510698" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.510666" elapsed="0.000197"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:23:31.511193" elapsed="0.000023"/>
</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-10-06T01:23:31.511512" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:31.511576" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:23:31.381835" elapsed="0.129826"/>
</kw>
<msg time="2026-10-06T01:23:31.511763" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:31.511803" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:31.379975" elapsed="0.131862"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.512122" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.511906" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.511890" elapsed="0.000304"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:31.379837" elapsed="0.132378"/>
</iter>
<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-10-06T01:23:31.514772" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:31.514661" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.514643" elapsed="0.000191"/>
</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-10-06T01:23:31.515977" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:31.515892" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.515875" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:31.516424" level="INFO">${karaf_connection_index} = 12</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-10-06T01:23:31.516183" elapsed="0.000266"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:31.517096" 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-10-06T01:23:31.516609" elapsed="0.000511"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:31.550427" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:31.517720" elapsed="0.032932"/>
</kw>
<msg time="2026-10-06T01:23:31.550862" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:31.550904" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:31.517290" elapsed="0.033648"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:31.621960" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:31.551630" elapsed="0.070623"/>
</kw>
<msg time="2026-10-06T01:23:31.622471" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:31.622519" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:31.551143" elapsed="0.071411"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.622979" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.622661" elapsed="0.000393"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.622630" elapsed="0.000451"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.623710" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.623280" elapsed="0.000511"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.624052" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.623855" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.623837" elapsed="0.000309"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:31.624180" elapsed="0.000037"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:31.626882" elapsed="0.000494"/>
</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-10-06T01:23:31.628620" elapsed="0.000515"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:31.630335" elapsed="0.000312"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:31.625142" elapsed="0.005813"/>
</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-10-06T01:23:31.624582" elapsed="0.006491"/>
</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="PASS" start="2026-10-06T01:23:31.515578" elapsed="0.115576"/>
</kw>
<msg time="2026-10-06T01:23:31.631261" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:31.631304" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:31.514982" elapsed="0.116356"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:31.631502" elapsed="0.000031"/>
</return>
<status status="PASS" start="2026-10-06T01:23:31.631413" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.631394" elapsed="0.000195"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.631952" elapsed="0.000024"/>
</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-10-06T01:23:31.632343" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:31.632410" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:31.514368" elapsed="0.118130"/>
</kw>
<msg time="2026-10-06T01:23:31.632589" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:31.632629" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:31.512478" elapsed="0.120185"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.633045" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.632823" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.632805" elapsed="0.000312"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:31.512341" elapsed="0.120798"/>
</iter>
<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-10-06T01:23:31.635841" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:31.635754" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.635736" elapsed="0.000169"/>
</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-10-06T01:23:31.637011" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:31.636926" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.636909" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:31.637461" level="INFO">${karaf_connection_index} = 14</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-10-06T01:23:31.637216" elapsed="0.000272"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:31.637840" 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-10-06T01:23:31.637651" elapsed="0.000214"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:31.684232" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:31.638447" elapsed="0.046014"/>
</kw>
<msg time="2026-10-06T01:23:31.684652" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:31.684723" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:31.638019" elapsed="0.046739"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:31.753295" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:31.685444" elapsed="0.068030"/>
</kw>
<msg time="2026-10-06T01:23:31.753632" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:31.753672" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:31.684960" elapsed="0.068765"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.754031" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.753809" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.753785" elapsed="0.000343"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.754670" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:31.754327" elapsed="0.000442"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.755028" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.754832" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.754815" elapsed="0.000307"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:31.755156" elapsed="0.000036"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:31.757842" elapsed="0.000491"/>
</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-10-06T01:23:31.759603" elapsed="0.000515"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:31.761351" elapsed="0.000311"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:31.756084" elapsed="0.005872"/>
</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-10-06T01:23:31.755544" elapsed="0.006531"/>
</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="PASS" start="2026-10-06T01:23:31.636646" elapsed="0.125508"/>
</kw>
<msg time="2026-10-06T01:23:31.762251" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:31.762293" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:31.636054" elapsed="0.126274"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:31.762484" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:31.762398" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.762381" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.762908" elapsed="0.000024"/>
</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-10-06T01:23:31.763217" elapsed="0.000034"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:31.763294" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:23:31.635416" elapsed="0.127968"/>
</kw>
<msg time="2026-10-06T01:23:31.763469" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:31.763509" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:31.633413" elapsed="0.130130"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.763918" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.763614" elapsed="0.000355"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.763597" elapsed="0.000393"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:31.633271" elapsed="0.130741"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:31.379698" elapsed="0.384346"/>
</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-10-06T01:23:31.377481" elapsed="0.386619"/>
</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-10-06T01:23:31.375227" elapsed="0.388930"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:31.374827" elapsed="0.389375"/>
</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-10-06T01:23:31.373791" elapsed="0.390480"/>
</kw>
<kw name="Add Sample Port To The Manual Bridge And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:31.767960" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:31.767730" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:31.767712" elapsed="0.000322"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:31.768362" 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-10-06T01:23:31.768454" 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-10-06T01:23:31.768222" elapsed="0.000256"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.768963" level="INFO">Attempting to execute command "sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan" on remote system "10.30.170.234" 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-10-06T01:23:31.768661" elapsed="0.000377"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:31.769530" level="INFO">${conn_id} = 148</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-10-06T01:23:31.769215" elapsed="0.000339"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:23:31.770389" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:23:31.770458" 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-10-06T01:23:31.770116" elapsed="0.000364"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:31.770632" elapsed="0.000299"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:23:31.771707" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:23:32.177169" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:23:30 UTC 2026

  System load:  0.17               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:23:30 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:23:31.771462" elapsed="0.405852"/>
</kw>
<msg time="2026-10-06T01:23:32.177388" 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-10-06T01:23:31.771091" elapsed="0.406371"/>
</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-10-06T01:23:31.769763" elapsed="0.407798"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:23:32.178039" level="INFO">Executing command 'sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan'.</msg>
<msg time="2026-10-06T01:23:32.211502" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:23:32.211653" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:23:32.211740" level="INFO">${stderr} = ovs-vsctl: Error detected while setting up 'vx1': vx1: vxlan type requires valid 'remote_ip' argument.  See ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/var/log/openvswitch"...</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-10-06T01:23:32.177834" elapsed="0.033945"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:32.212003" elapsed="0.000322"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.213023" level="INFO">ovs-vsctl: Error detected while setting up 'vx1': vx1: vxlan type requires valid 'remote_ip' argument.  See ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/var/log/openvswitch".</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.212639" elapsed="0.000444"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:32.213357" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:32.213185" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.213154" elapsed="0.000298"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:23:32.213630" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-10-06T01:23:32.213519" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.213499" elapsed="0.000261"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:32.213803" elapsed="0.000018"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:32.214870" elapsed="0.000417"/>
</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-10-06T01:23:32.215582" elapsed="0.000226"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:32.216025" elapsed="0.000140"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:32.214219" elapsed="0.002013"/>
</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-10-06T01:23:31.767291" elapsed="0.449065"/>
</kw>
<msg time="2026-10-06T01:23:32.216425" 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-10-06T01:23:31.766760" elapsed="0.449731"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:23:31.766318" elapsed="0.450346"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.217397" level="INFO">${dictionary_operational} = {'vx1': '2'}</msg>
<var>${dictionary_operational}</var>
<arg>vx1=2</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:23:32.216963" elapsed="0.000469"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.218171" level="INFO">${dictionary_config} = {'vx1': '0'}</msg>
<var>${dictionary_config}</var>
<arg>vx1=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:23:32.217755" elapsed="0.000459"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.224704" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:32.224187" elapsed="0.000555"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.225372" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:32.224959" elapsed="0.000447"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:32.225464" elapsed="0.000039"/>
</return>
<msg time="2026-10-06T01:23:32.225643" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:32.223649" elapsed="0.002070"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.229596" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:23:32.229011" elapsed="0.000620"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:32.229711" elapsed="0.000041"/>
</return>
<msg time="2026-10-06T01:23:32.229897" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:32.228544" elapsed="0.001389"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.231602" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.231282" elapsed="0.000378"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.232283" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.231941" elapsed="0.000400"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:32.240772" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:23:32.240962" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '144'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:23:32.241088" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:23:32.232768" elapsed="0.008353"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.232428" elapsed="0.008747"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.241441" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.241209" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.232404" elapsed="0.009149"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.243371" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.242880" elapsed="0.000555"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.242517" elapsed="0.000963"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.242493" elapsed="0.001019"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.244397" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.243944" elapsed="0.000514"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.243588" elapsed="0.000919"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.243567" elapsed="0.000972"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.245340" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:32.244808" elapsed="0.000568"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.245833" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.245522" elapsed="0.000387"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.246565" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:32.246173" elapsed="0.000426"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.245946" elapsed="0.000699"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.245497" elapsed="0.001176"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.247430" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:32.246934" elapsed="0.000535"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.247861" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.247559" elapsed="0.000376"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.248561" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:32.248181" elapsed="0.000413"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.247967" elapsed="0.000672"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.247536" elapsed="0.001131"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:32.248883" elapsed="0.000436"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:23:32.249926" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:32.249555" elapsed="0.000406"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:23:32.250178" elapsed="0.000324"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:23:32.242022" elapsed="0.008559"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:23:32.250804" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-10-06T01:23:32.250668" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.250644" elapsed="0.000270"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.251107" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:23:32.251195" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:23:32.251510" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:23:32.230406" elapsed="0.021141"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:23:32.251610" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:23:32.251807" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:23:32.227937" elapsed="0.023906"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.253319" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:32.252864" elapsed="0.000542"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:23:32.252613" elapsed="0.000844"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:23:32.252467" elapsed="0.001029"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:23:32.252125" elapsed="0.001437"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:32.225967" elapsed="0.027639"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.257397" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:32.257008" elapsed="0.000424"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:32.257491" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:23:32.257665" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:32.256535" elapsed="0.001185"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.259355" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.259029" elapsed="0.000431"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.260286" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.259751" elapsed="0.000612"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:32.271990" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0196abtsaqd8g4mpvcap0t4mk0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:23:32.272180" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:23:32.272354" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:23:32.260797" elapsed="0.011594"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.260454" elapsed="0.012012"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.272812" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.272512" elapsed="0.000388"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.260430" elapsed="0.012499"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.274874" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.274361" elapsed="0.000575"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.274001" elapsed="0.000980"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.273974" elapsed="0.001037"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.275823" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.275426" elapsed="0.000456"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.275082" elapsed="0.000845"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.275061" elapsed="0.000897"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.276746" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:32.276206" elapsed="0.000577"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.277158" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.276874" elapsed="0.000356"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.277886" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:32.277497" elapsed="0.000423"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.277277" elapsed="0.000689"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.276850" elapsed="0.001143"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.278729" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:32.278225" elapsed="0.000540"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.279134" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.278854" elapsed="0.000352"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.279854" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:32.279469" elapsed="0.000419"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.279237" elapsed="0.000696"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.278831" elapsed="0.001129"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:32.280156" elapsed="0.000428"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:23:32.281147" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:32.280823" elapsed="0.000358"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:23:32.281403" elapsed="0.000314"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:23:32.273451" elapsed="0.008348"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:23:32.282003" elapsed="0.000043"/>
</return>
<status status="PASS" start="2026-10-06T01:23:32.281886" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.281863" elapsed="0.000328"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.282411" elapsed="0.000029"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:23:32.282502" elapsed="0.000019"/>
</return>
<msg time="2026-10-06T01:23:32.282832" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:23:32.258128" elapsed="0.024740"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:23:32.282933" elapsed="0.000034"/>
</return>
<msg time="2026-10-06T01:23:32.283105" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:23:32.255712" elapsed="0.027426"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.284604" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:32.284155" elapsed="0.000562"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:23:32.283934" elapsed="0.000836"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:23:32.283785" elapsed="0.001029"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:23:32.283445" elapsed="0.001442"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:32.253743" elapsed="0.031187"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.288301" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:32.288011" elapsed="0.000315"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:32.288369" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:23:32.288490" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:32.287674" elapsed="0.000839"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.289753" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.289514" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.290209" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.289985" elapsed="0.000278"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:32.302236" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0gusd5pkzmwglcb3p20r9r8j10.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:23:32.302351" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:23:32.302436" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:23:32.290556" elapsed="0.011904"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.290326" elapsed="0.012172"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.302670" elapsed="0.000041"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.302522" elapsed="0.000228"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.290309" elapsed="0.012461"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.304036" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.303712" elapsed="0.000365"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.303449" elapsed="0.000660"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.303432" elapsed="0.000699"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.304720" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.304433" elapsed="0.000329"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.304180" elapsed="0.000612"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.304165" elapsed="0.000649"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.305336" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:32.304981" elapsed="0.000380"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.305629" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.305424" elapsed="0.000311"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.306189" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:32.305922" elapsed="0.000292"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.305762" elapsed="0.000499"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.305407" elapsed="0.000876"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.306823" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:32.306461" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.307111" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.306912" elapsed="0.000251"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.307612" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:32.307353" elapsed="0.000283"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.307185" elapsed="0.000483"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.306896" elapsed="0.000808"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:32.307845" elapsed="0.000297"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:23:32.308535" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:32.308313" elapsed="0.000247"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:23:32.308731" elapsed="0.000215"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:23:32.303094" elapsed="0.005908"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:23:32.309144" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:32.309064" elapsed="0.000134"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.309047" elapsed="0.000173"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.309376" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:23:32.309444" elapsed="0.000017"/>
</return>
<msg time="2026-10-06T01:23:32.309687" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:23:32.288835" elapsed="0.020880"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:23:32.309761" elapsed="0.000028"/>
</return>
<msg time="2026-10-06T01:23:32.309891" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:23:32.287238" elapsed="0.022676"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.312499" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:32.312175" elapsed="0.000384"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:23:32.312018" elapsed="0.000582"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:23:32.311912" elapsed="0.000715"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:23:32.310115" elapsed="0.002581"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:32.285051" elapsed="0.027678"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:32.225799" elapsed="0.086959"/>
</for>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:23:32.222952" elapsed="0.089854"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:23:32.218523" elapsed="0.094331"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.317192" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:32.316867" elapsed="0.000350"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.317647" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:32.317378" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:32.317759" elapsed="0.000028"/>
</return>
<msg time="2026-10-06T01:23:32.317889" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:32.316504" elapsed="0.001408"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.320486" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:23:32.320205" elapsed="0.000305"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:32.320552" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:23:32.320686" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:32.319884" elapsed="0.000828"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.321858" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.321620" elapsed="0.000279"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.322316" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.322085" elapsed="0.000272"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:32.331441" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:23:32.331604" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '6157'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;c31ebfa2-624b-423b-b118-add4b24bc922&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;f96ec6f2-d93b-4281-9e4e-46fbfd8d0b2b&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;209ababd-0735-4d17-9bd1-80cc348df6fa&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;a2:bf:1e:c3:3b:42&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;6&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vx1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8ca9dd9a-6b68-41da-8b1b-5f4d9aa11808&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vx1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;1b7c8bfc-2417-45e2-936f-eb08a1699929&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:a2:bf:1e:c3:3b:42&lt;/datapath-id&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:23:32.331862" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:23:32.322643" elapsed="0.009245"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.322419" elapsed="0.009509"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.332103" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.331952" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.322401" elapsed="0.009803"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.333584" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;c31ebfa2-624b-423b-b118-add4b24bc922&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;f96ec6f2-d93b-4281-9e4e-46fbfd8d0b2b&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;209ababd-0735-4d17-9bd1-80cc348df6fa&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;a2:bf:1e:c3:3b:42&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;6&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vx1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8ca9dd9a-6b68-41da-8b1b-5f4d9aa11808&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vx1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;1b7c8bfc-2417-45e2-936f-eb08a1699929&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:a2:bf:1e:c3:3b:42&lt;/datapath-id&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.333182" elapsed="0.000554"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.332939" elapsed="0.000831"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.332919" elapsed="0.000874"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.334364" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.334078" elapsed="0.000327"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.333844" elapsed="0.000593"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.333829" elapsed="0.000630"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.334986" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:32.334627" elapsed="0.000385"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.335290" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.335076" elapsed="0.000268"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.335958" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:32.335521" elapsed="0.000461"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.335366" elapsed="0.000650"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.335060" elapsed="0.000977"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.336559" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:32.336207" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.336866" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.336648" elapsed="0.000271"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.337373" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:32.337094" elapsed="0.000303"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.336941" elapsed="0.000489"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.336632" elapsed="0.000818"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:32.337587" elapsed="0.000310"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:23:32.338290" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:32.338052" elapsed="0.000263"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:23:32.338463" elapsed="0.000212"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:23:32.332562" elapsed="0.006184"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:23:32.338889" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:23:32.338809" elapsed="0.000136"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.338792" elapsed="0.000175"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.339104" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:23:32.339166" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:23:32.339451" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1&lt;/node-id...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:23:32.321004" elapsed="0.018475"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:23:32.339525" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:23:32.339648" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1&lt;/node-id...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:23:32.319459" elapsed="0.020215"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.340717" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:32.340394" elapsed="0.000410"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:23:32.340217" elapsed="0.000622"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:23:32.340115" elapsed="0.000752"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:23:32.339893" elapsed="0.001022"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:32.318064" elapsed="0.022912"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.343490" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:32.343205" elapsed="0.000310"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:32.343556" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:23:32.343694" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:32.342890" elapsed="0.000829"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.344872" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.344635" elapsed="0.000279"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.345341" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.345109" elapsed="0.000273"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:32.360077" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0196abtsaqd8g4mpvcap0t4mk0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:23:32.360264" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2768'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"c31ebfa2-624b-423b-b118-add4b24bc922","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"f96ec6f2-d93b-4281-9e4e-46fbfd8d0b2b","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"209ababd-0735-4d17-9bd1-80cc348df6fa","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"a2:bf:1e:c3:3b:42","ovsdb:ofport":65534,"ovsdb:ifindex":6},{"tp-id":"vx1","ovsdb:port-uuid":"8ca9dd9a-6b68-41da-8b1b-5f4d9aa11808","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"1b7c8bfc-2417-45e2-936f-eb08a1699929","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:a2:bf:1e:c3:3b:42"},{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']"}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:23:32.360381" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:23:32.345674" elapsed="0.014733"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.345443" elapsed="0.015007"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.360651" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.360477" elapsed="0.000256"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.345426" elapsed="0.015328"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.362134" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"c31ebfa2-624b-423b-b118-add4b24bc922","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"f96ec6f2-d93b-4281-9e4e-46fbfd8d0b2b","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"209ababd-0735-4d17-9bd1-80cc348df6fa","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"a2:bf:1e:c3:3b:42","ovsdb:ofport":65534,"ovsdb:ifindex":6},{"tp-id":"vx1","ovsdb:port-uuid":"8ca9dd9a-6b68-41da-8b1b-5f4d9aa11808","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"1b7c8bfc-2417-45e2-936f-eb08a1699929","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:a2:bf:1e:c3:3b:42"},{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']"}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.361740" elapsed="0.000501"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.361481" elapsed="0.000808"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.361462" elapsed="0.000850"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.362897" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.362602" elapsed="0.000336"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.362363" elapsed="0.000606"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.362347" elapsed="0.000645"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.363545" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:32.363171" elapsed="0.000400"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.364040" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.363825" elapsed="0.000268"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.364562" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:32.364285" elapsed="0.000302"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.364116" elapsed="0.000509"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.363618" elapsed="0.001034"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.365220" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:32.364865" elapsed="0.000381"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.365527" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.365324" elapsed="0.000255"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.366035" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:32.365772" elapsed="0.000288"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.365602" elapsed="0.000490"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.365307" elapsed="0.000805"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:32.366267" elapsed="0.000303"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:23:32.366973" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:32.366741" elapsed="0.000256"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:23:32.367146" elapsed="0.000224"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:23:32.361099" elapsed="0.006330"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:23:32.367573" elapsed="0.000031"/>
</return>
<status status="PASS" start="2026-10-06T01:23:32.367490" elapsed="0.000147"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.367474" elapsed="0.000185"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.367813" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:23:32.367876" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:23:32.368140" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:23:32.344017" elapsed="0.024149"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:23:32.368212" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:23:32.368350" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:23:32.342466" elapsed="0.025909"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.369431" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:32.369102" elapsed="0.000405"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:23:32.368943" elapsed="0.000601"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:23:32.368834" elapsed="0.000739"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:23:32.368581" elapsed="0.001041"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:32.341058" elapsed="0.028643"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.372322" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:32.372040" elapsed="0.000307"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:32.372393" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:23:32.372519" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:32.371713" elapsed="0.000830"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.373731" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.373483" elapsed="0.000292"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.374185" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.373962" elapsed="0.000263"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:32.386883" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0gusd5pkzmwglcb3p20r9r8j10.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:23:32.387040" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2768'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"c31ebfa2-624b-423b-b118-add4b24bc922","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"f96ec6f2-d93b-4281-9e4e-46fbfd8d0b2b","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"209ababd-0735-4d17-9bd1-80cc348df6fa","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"a2:bf:1e:c3:3b:42","ovsdb:ofport":65534,"ovsdb:ifindex":6},{"tp-id":"vx1","ovsdb:port-uuid":"8ca9dd9a-6b68-41da-8b1b-5f4d9aa11808","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"1b7c8bfc-2417-45e2-936f-eb08a1699929","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:a2:bf:1e:c3:3b:42"},{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']"}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:23:32.387145" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:23:32.374531" elapsed="0.012638"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.374307" elapsed="0.012906"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.387413" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.387238" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.374289" elapsed="0.013205"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.388831" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"c31ebfa2-624b-423b-b118-add4b24bc922","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"f96ec6f2-d93b-4281-9e4e-46fbfd8d0b2b","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"209ababd-0735-4d17-9bd1-80cc348df6fa","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"a2:bf:1e:c3:3b:42","ovsdb:ofport":65534,"ovsdb:ifindex":6},{"tp-id":"vx1","ovsdb:port-uuid":"8ca9dd9a-6b68-41da-8b1b-5f4d9aa11808","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"1b7c8bfc-2417-45e2-936f-eb08a1699929","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:a2:bf:1e:c3:3b:42"},{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']"}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.388438" elapsed="0.000485"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.388187" elapsed="0.000770"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.388168" elapsed="0.000811"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.389728" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.389281" elapsed="0.000490"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.389030" elapsed="0.000772"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.389015" elapsed="0.000809"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.390357" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:32.389995" elapsed="0.000387"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.390649" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.390446" elapsed="0.000272"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.391158" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:32.390897" elapsed="0.000286"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.390741" elapsed="0.000474"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.390430" elapsed="0.000806"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.391787" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:32.391434" elapsed="0.000379"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.392079" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.391877" elapsed="0.000254"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.392587" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:32.392322" elapsed="0.000292"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:32.392154" elapsed="0.000492"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.391861" elapsed="0.000805"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:32.392822" elapsed="0.000293"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:23:32.393509" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:32.393285" elapsed="0.000251"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:23:32.393700" elapsed="0.000213"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:23:32.387841" elapsed="0.006128"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:23:32.394112" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:32.394031" elapsed="0.000136"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.394014" elapsed="0.000175"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.394339" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:23:32.394403" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:23:32.394666" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:23:32.372865" elapsed="0.021844"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:23:32.394755" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:23:32.394878" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:23:32.371280" elapsed="0.023623"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.395944" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:32.395618" elapsed="0.000399"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:23:32.395456" elapsed="0.000598"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:23:32.395351" elapsed="0.000730"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:23:32.395106" elapsed="0.001023"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:32.369787" elapsed="0.026406"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:32.317958" elapsed="0.078263"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:23:32.316020" elapsed="0.080264"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:23:32.313055" elapsed="0.083280"/>
</kw>
<doc>Add Port vx1 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:23:31.765933" elapsed="0.630461"/>
</kw>
<doc>Add port with OVS command and verify it gets applied from all instances.</doc>
<status status="PASS" start="2026-10-06T01:23:31.373157" elapsed="1.023347"/>
</test>
<test id="s1-s1-s1-t32" name="Create Tap Device After Recover" line="158">
<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-10-06T01:23:32.398193" elapsed="0.000377"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:23:32.397943" elapsed="0.000680"/>
</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-10-06T01:23:32.399798" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:32.399711" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.399693" elapsed="0.000169"/>
</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-10-06T01:23:32.401749" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:32.401651" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.401635" elapsed="0.000176"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.402778" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:32.402429" elapsed="0.000376"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.403222" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:32.402953" elapsed="0.000293"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:32.403302" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:23:32.403428" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:32.402011" elapsed="0.001440"/>
</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-10-06T01:23:32.406024" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:32.405939" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.405922" elapsed="0.000165"/>
</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-10-06T01:23:32.407227" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:32.407144" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.407127" elapsed="0.000178"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:32.407698" 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-10-06T01:23:32.407450" elapsed="0.000274"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:32.408061" 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-10-06T01:23:32.407886" elapsed="0.000199"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:32.444494" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:32.408664" elapsed="0.036003"/>
</kw>
<msg time="2026-10-06T01:23:32.444871" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:32.444913" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:32.408238" elapsed="0.036709"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:32.511833" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "A "f "t "e "r "[78C[C "[A[78CR
 "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:32.445553" elapsed="0.066837"/>
</kw>
<msg time="2026-10-06T01:23:32.513056" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:32.513167" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:32.445116" elapsed="0.068176"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.514166" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.513528" elapsed="0.000840"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.513450" elapsed="0.000979"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.515850" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "A "f "t "e "r "[78C[C "[A[78CR
 "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.514915" elapsed="0.001109"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.516645" elapsed="0.000076"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.516167" elapsed="0.000689"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.516127" elapsed="0.000801"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:32.517008" elapsed="0.000072"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:32.522182" elapsed="0.000787"/>
</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-10-06T01:23:32.524782" elapsed="0.000674"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:32.527134" elapsed="0.000482"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:32.519180" elapsed="0.008698"/>
</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-10-06T01:23:32.517776" elapsed="0.010273"/>
</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="PASS" start="2026-10-06T01:23:32.406887" elapsed="0.121306"/>
</kw>
<msg time="2026-10-06T01:23:32.528342" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:32.528398" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:32.406232" elapsed="0.122215"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:32.528719" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-10-06T01:23:32.528570" elapsed="0.000230"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.528543" elapsed="0.000290"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:23:32.529355" elapsed="0.000035"/>
</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-10-06T01:23:32.529835" elapsed="0.000050"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:32.529945" elapsed="0.000023"/>
</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="PASS" start="2026-10-06T01:23:32.405638" elapsed="0.124432"/>
</kw>
<msg time="2026-10-06T01:23:32.530192" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:32.530248" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:32.403786" elapsed="0.126532"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.530830" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.530420" elapsed="0.000482"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.530396" elapsed="0.000537"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:32.403632" elapsed="0.127331"/>
</iter>
<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-10-06T01:23:32.535116" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:32.534991" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.534965" elapsed="0.000239"/>
</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-10-06T01:23:32.536918" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:32.536659" elapsed="0.000323"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.536635" elapsed="0.000377"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:32.537602" level="INFO">${karaf_connection_index} = 12</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-10-06T01:23:32.537215" elapsed="0.000424"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:32.538143" 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-10-06T01:23:32.537891" elapsed="0.000287"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:32.572376" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:32.539178" elapsed="0.033428"/>
</kw>
<msg time="2026-10-06T01:23:32.572821" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:32.572864" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:32.538450" elapsed="0.034449"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:32.654095" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "A "f "t "e "r "[78C[C "[A[78CR
 "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:32.573615" elapsed="0.080813"/>
</kw>
<msg time="2026-10-06T01:23:32.654666" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:32.654742" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:32.573106" elapsed="0.081672"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.655186" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.654889" elapsed="0.000386"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.654856" elapsed="0.000446"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.655920" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "A "f "t "e "r "[78C[C "[A[78CR
 "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.655485" elapsed="0.000512"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.656269" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.656059" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.656043" elapsed="0.000321"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:32.656399" elapsed="0.000036"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:32.659010" elapsed="0.000499"/>
</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-10-06T01:23:32.660784" elapsed="0.000548"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:32.662541" elapsed="0.000331"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:32.657273" elapsed="0.005665"/>
</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-10-06T01:23:32.656736" elapsed="0.006320"/>
</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="PASS" start="2026-10-06T01:23:32.536293" elapsed="0.126841"/>
</kw>
<msg time="2026-10-06T01:23:32.663222" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:32.663277" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:32.535436" elapsed="0.127877"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:32.663471" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:32.663384" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.663367" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.663902" elapsed="0.000024"/>
</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-10-06T01:23:32.664277" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:32.664344" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:23:32.534449" elapsed="0.129984"/>
</kw>
<msg time="2026-10-06T01:23:32.664537" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:32.664590" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:32.531342" elapsed="0.133285"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.665007" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.664730" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.664707" elapsed="0.000387"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:32.531133" elapsed="0.133988"/>
</iter>
<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-10-06T01:23:32.668139" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:32.668051" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.668033" elapsed="0.000168"/>
</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-10-06T01:23:32.669318" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:32.669218" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.669201" elapsed="0.000181"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:32.669846" level="INFO">${karaf_connection_index} = 14</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-10-06T01:23:32.669536" elapsed="0.000344"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:32.670391" 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-10-06T01:23:32.670113" elapsed="0.000317"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:32.704995" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:32.671361" elapsed="0.033820"/>
</kw>
<msg time="2026-10-06T01:23:32.705367" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:32.705409" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:32.670673" elapsed="0.034770"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:32.775818" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "A "f "t "e "r "[78C[C "[A[78CR
 "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:32.706076" elapsed="0.070263"/>
</kw>
<msg time="2026-10-06T01:23:32.776791" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:32.776888" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:32.705617" elapsed="0.071346"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.777770" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.777158" elapsed="0.000774"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.777104" elapsed="0.000885"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.779297" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "A "f "t "e "r "[78C[C "[A[78CR
 "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:32.778412" elapsed="0.001055"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.780081" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.779603" elapsed="0.000631"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.779566" elapsed="0.000742"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:32.780382" elapsed="0.000071"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:32.786318" elapsed="0.001130"/>
</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-10-06T01:23:32.790521" elapsed="0.001221"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:32.794501" elapsed="0.000729"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:32.782450" elapsed="0.012952"/>
</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-10-06T01:23:32.781106" elapsed="0.014555"/>
</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="PASS" start="2026-10-06T01:23:32.668960" elapsed="0.126988"/>
</kw>
<msg time="2026-10-06T01:23:32.796136" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:32.796224" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:32.668362" elapsed="0.127962"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:32.796671" elapsed="0.000258"/>
</return>
<status status="PASS" start="2026-10-06T01:23:32.796480" elapsed="0.000520"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.796442" elapsed="0.000609"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.797825" elapsed="0.000052"/>
</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-10-06T01:23:32.798530" elapsed="0.000050"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:32.798674" elapsed="0.000060"/>
</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="PASS" start="2026-10-06T01:23:32.667429" elapsed="0.131470"/>
</kw>
<msg time="2026-10-06T01:23:32.799087" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:32.799175" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:32.665454" elapsed="0.133795"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.799934" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.799425" elapsed="0.000619"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.799389" elapsed="0.000704"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:32.665280" elapsed="0.134861"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:32.403496" elapsed="0.396709"/>
</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-10-06T01:23:32.401363" elapsed="0.398973"/>
</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-10-06T01:23:32.399440" elapsed="0.401010"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:32.399011" elapsed="0.401530"/>
</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-10-06T01:23:32.397552" elapsed="0.403099"/>
</kw>
<kw name="Create Sample Tap Device" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:32.804464" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:32.804095" elapsed="0.000446"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:32.803811" elapsed="0.000763"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:32.805068" 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-10-06T01:23:32.805206" 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-10-06T01:23:32.804877" elapsed="0.000365"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.805983" level="INFO">Attempting to execute command "ip tuntap add mode tap vport1" on remote system "10.30.170.234" 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-10-06T01:23:32.805536" elapsed="0.000509"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:32.806837" level="INFO">${conn_id} = 153</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-10-06T01:23:32.806366" elapsed="0.000506"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:23:32.808134" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:23:32.808236" 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-10-06T01:23:32.807741" elapsed="0.000543"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:32.808532" elapsed="0.000458"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:23:32.810178" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:23:33.220347" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:23:30 UTC 2026

  System load:  0.17               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:23:32 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:23:32.809821" elapsed="0.410644"/>
</kw>
<msg time="2026-10-06T01:23:33.220537" 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-10-06T01:23:32.809229" elapsed="0.411380"/>
</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-10-06T01:23:32.807167" elapsed="0.413558"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:23:33.221185" level="INFO">Executing command 'ip tuntap add mode tap vport1'.</msg>
<msg time="2026-10-06T01:23:33.233739" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-10-06T01:23:33.233848" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:23:33.233886" level="INFO">${stderr} = ioctl(TUNSETIFF): Operation not permitted</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-10-06T01:23:33.220978" elapsed="0.012929"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:33.234062" elapsed="0.000193"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:33.234893" level="INFO">ioctl(TUNSETIFF): Operation not permitted</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:33.234500" elapsed="0.000451"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:33.235204" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:33.235055" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:33.235023" elapsed="0.000297"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:23:33.235505" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-10-06T01:23:33.235390" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:33.235370" elapsed="0.000243"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:33.235655" elapsed="0.000018"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:33.236704" elapsed="0.000397"/>
</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-10-06T01:23:33.237374" elapsed="0.000202"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:33.237792" elapsed="0.000124"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:33.236097" elapsed="0.001886"/>
</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-10-06T01:23:32.803181" elapsed="0.434896"/>
</kw>
<msg time="2026-10-06T01:23:33.238143" 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-10-06T01:23:32.802404" elapsed="0.435802"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ip tuntap add mode tap vport1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:23:32.801770" elapsed="0.436548"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:33.241187" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:33.240861" elapsed="0.000397"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:33.240836" elapsed="0.000470"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:33.241762" 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-10-06T01:23:33.241890" 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-10-06T01:23:33.241567" elapsed="0.000357"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:33.242601" level="INFO">Attempting to execute command "ip tuntap add mode tap vport2" on remote system "10.30.170.234" 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-10-06T01:23:33.242179" elapsed="0.000480"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:33.243350" level="INFO">${conn_id} = 155</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-10-06T01:23:33.242921" elapsed="0.000463"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:23:33.244525" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:23:33.244620" 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-10-06T01:23:33.244162" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:33.244875" elapsed="0.000404"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:23:33.246351" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:23:33.647918" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:23:30 UTC 2026

  System load:  0.17               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:23:33 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:23:33.246020" elapsed="0.401985"/>
</kw>
<msg time="2026-10-06T01:23:33.648064" 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-10-06T01:23:33.245501" elapsed="0.402619"/>
</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-10-06T01:23:33.243650" elapsed="0.404549"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:23:33.648583" level="INFO">Executing command 'ip tuntap add mode tap vport2'.</msg>
<msg time="2026-10-06T01:23:33.661319" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-10-06T01:23:33.661420" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:23:33.661459" level="INFO">${stderr} = ioctl(TUNSETIFF): Operation not permitted</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-10-06T01:23:33.648423" elapsed="0.013057"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:33.661632" elapsed="0.000222"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:33.662319" level="INFO">ioctl(TUNSETIFF): Operation not permitted</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:33.662062" elapsed="0.000298"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:33.662527" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:33.662430" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:33.662408" elapsed="0.000185"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:23:33.662738" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:33.662639" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:33.662626" elapsed="0.000188"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:33.662845" elapsed="0.000012"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:33.663549" elapsed="0.000296"/>
</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-10-06T01:23:33.664025" elapsed="0.000140"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:33.664318" elapsed="0.000135"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:33.663137" elapsed="0.001364"/>
</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-10-06T01:23:33.240233" elapsed="0.424337"/>
</kw>
<msg time="2026-10-06T01:23:33.664617" 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-10-06T01:23:33.239162" elapsed="0.425501"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ip tuntap add mode tap vport2</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:23:33.238562" elapsed="0.426191"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:33.666756" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:33.666507" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:33.666489" elapsed="0.000343"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:33.667147" 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-10-06T01:23:33.667246" 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-10-06T01:23:33.667023" elapsed="0.000263"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:33.667775" level="INFO">Attempting to execute command "ifconfig vport1 up" on remote system "10.30.170.234" 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-10-06T01:23:33.667472" elapsed="0.000345"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:33.668293" level="INFO">${conn_id} = 157</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-10-06T01:23:33.667988" elapsed="0.000331"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:23:33.669126" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:23:33.669194" 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-10-06T01:23:33.668879" elapsed="0.000337"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:33.669376" elapsed="0.000285"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:23:33.670439" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:23:34.083259" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:23:30 UTC 2026

  System load:  0.17               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:23:33 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:23:33.670195" elapsed="0.413157"/>
</kw>
<msg time="2026-10-06T01:23:34.083406" 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-10-06T01:23:33.669836" elapsed="0.413622"/>
</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-10-06T01:23:33.668510" elapsed="0.415027"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:23:34.083898" level="INFO">Executing command 'ifconfig vport1 up'.</msg>
<msg time="2026-10-06T01:23:34.096833" level="INFO">Command exited with return code 255.</msg>
<msg time="2026-10-06T01:23:34.096933" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:23:34.096971" level="INFO">${stderr} = vport1: ERROR while getting interface flags: No such device</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-10-06T01:23:34.083749" elapsed="0.013243"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:34.097143" elapsed="0.000215"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:34.097821" level="INFO">vport1: ERROR while getting interface flags: No such device</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:34.097563" elapsed="0.000340"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:34.098063" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:34.097969" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.097949" elapsed="0.000179"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:23:34.098255" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-10-06T01:23:34.098176" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.098162" elapsed="0.000187"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:34.098379" elapsed="0.000013"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:34.099073" elapsed="0.000299"/>
</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-10-06T01:23:34.099554" elapsed="0.000295"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:34.099992" elapsed="0.000089"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:34.098659" elapsed="0.001469"/>
</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-10-06T01:23:33.666070" elapsed="0.434126"/>
</kw>
<msg time="2026-10-06T01:23:34.100242" 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-10-06T01:23:33.665359" elapsed="0.434940"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ifconfig vport1 up</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:23:33.664929" elapsed="0.435443"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:34.102176" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:34.101944" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.101927" elapsed="0.000323"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:34.102571" 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-10-06T01:23:34.102662" 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-10-06T01:23:34.102449" elapsed="0.000252"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:34.103177" level="INFO">Attempting to execute command "ifconfig vport2 up" on remote system "10.30.170.234" 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-10-06T01:23:34.102886" elapsed="0.000333"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:34.103712" level="INFO">${conn_id} = 159</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-10-06T01:23:34.103404" elapsed="0.000333"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:23:34.104538" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:23:34.104606" 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-10-06T01:23:34.104298" elapsed="0.000332"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:34.104794" elapsed="0.000281"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:23:34.105854" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:23:34.524859" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:23:30 UTC 2026

  System load:  0.17               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:23:33 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:23:34.105611" elapsed="0.419376"/>
</kw>
<msg time="2026-10-06T01:23:34.525046" 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-10-06T01:23:34.105235" elapsed="0.419869"/>
</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-10-06T01:23:34.103930" elapsed="0.421264"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:23:34.525580" level="INFO">Executing command 'ifconfig vport2 up'.</msg>
<msg time="2026-10-06T01:23:34.538272" level="INFO">Command exited with return code 255.</msg>
<msg time="2026-10-06T01:23:34.538383" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:23:34.538422" level="INFO">${stderr} = vport2: ERROR while getting interface flags: No such device</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-10-06T01:23:34.525419" elapsed="0.013024"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:34.538595" elapsed="0.000492"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:34.539763" level="INFO">vport2: ERROR while getting interface flags: No such device</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:34.539408" elapsed="0.000414"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:34.540050" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:34.539915" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.539888" elapsed="0.000254"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:23:34.540335" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:23:34.540208" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.540188" elapsed="0.000255"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:34.540485" elapsed="0.000019"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:34.541461" elapsed="0.000409"/>
</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-10-06T01:23:34.542120" elapsed="0.000207"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:34.542521" elapsed="0.000120"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:34.540903" elapsed="0.001824"/>
</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-10-06T01:23:34.101499" elapsed="0.441323"/>
</kw>
<msg time="2026-10-06T01:23:34.542886" 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-10-06T01:23:34.100976" elapsed="0.441970"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ifconfig vport2 up</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:23:34.100546" elapsed="0.442497"/>
</kw>
<doc>Create Tap Device vport1 and vport2 to add to the bridge br-s1 using OVS command.</doc>
<status status="PASS" start="2026-10-06T01:23:32.801122" elapsed="1.741996"/>
</kw>
<doc>Create tap devices to add to the bridge in ovs</doc>
<status status="PASS" start="2026-10-06T01:23:32.396981" elapsed="2.146284"/>
</test>
<test id="s1-s1-s1-t33" name="Add Tap Device Manually and Verify After Recover" line="162">
<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-10-06T01:23:34.545269" elapsed="0.000291"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:23:34.544925" elapsed="0.000702"/>
</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-10-06T01:23:34.546968" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:34.546848" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.546823" elapsed="0.000235"/>
</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-10-06T01:23:34.549780" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:34.549644" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.549621" elapsed="0.000245"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:34.551133" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:34.550654" elapsed="0.000515"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:34.551791" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:34.551393" elapsed="0.000431"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:34.551879" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:23:34.552102" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:34.550144" elapsed="0.001990"/>
</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-10-06T01:23:34.557839" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:34.557716" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.557671" elapsed="0.000256"/>
</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-10-06T01:23:34.559555" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:34.559438" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.559415" elapsed="0.000227"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:34.560200" 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-10-06T01:23:34.559864" elapsed="0.000371"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:34.560758" 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-10-06T01:23:34.560474" elapsed="0.000320"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:34.595169" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:34.561630" elapsed="0.033752"/>
</kw>
<msg time="2026-10-06T01:23:34.595545" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:34.595587" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:34.561008" elapsed="0.034612"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:34.671241" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:34.596232" elapsed="0.075203"/>
</kw>
<msg time="2026-10-06T01:23:34.671599" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:34.671641" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:34.595807" elapsed="0.075895"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:34.671995" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:34.671779" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.671758" elapsed="0.000332"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:34.672616" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:34.672265" elapsed="0.000463"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:34.672987" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:34.672791" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.672774" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:34.673110" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:34.675606" elapsed="0.000502"/>
</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-10-06T01:23:34.677357" elapsed="0.000535"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:34.679086" elapsed="0.000335"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:34.673925" elapsed="0.005563"/>
</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-10-06T01:23:34.673402" elapsed="0.006206"/>
</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="PASS" start="2026-10-06T01:23:34.559052" elapsed="0.120660"/>
</kw>
<msg time="2026-10-06T01:23:34.679838" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:34.679878" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:34.558132" elapsed="0.121780"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:34.680066" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:34.679982" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.679964" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:23:34.680483" elapsed="0.000024"/>
</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-10-06T01:23:34.680906" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:34.680973" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:34.557265" elapsed="0.123794"/>
</kw>
<msg time="2026-10-06T01:23:34.681145" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:34.681185" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:34.552638" elapsed="0.128580"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:34.681519" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:34.681300" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.681270" elapsed="0.000321"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:34.552445" elapsed="0.129167"/>
</iter>
<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-10-06T01:23:34.684120" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:34.684036" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.684018" elapsed="0.000164"/>
</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-10-06T01:23:34.685486" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:34.685401" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.685383" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:34.685944" level="INFO">${karaf_connection_index} = 12</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-10-06T01:23:34.685715" elapsed="0.000253"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:34.686314" 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-10-06T01:23:34.686128" elapsed="0.000211"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:34.725228" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:34.686921" elapsed="0.038530"/>
</kw>
<msg time="2026-10-06T01:23:34.725614" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:34.725661" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:34.686491" elapsed="0.039244"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:34.807983" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:34.726376" elapsed="0.081869"/>
</kw>
<msg time="2026-10-06T01:23:34.808470" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:34.808512" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:34.725914" elapsed="0.082632"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:34.808972" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:34.808649" elapsed="0.000460"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.808619" elapsed="0.000519"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:34.809770" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:34.809335" elapsed="0.000516"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:34.810110" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:34.809912" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.809896" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:34.810237" elapsed="0.000037"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:34.812903" elapsed="0.000499"/>
</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-10-06T01:23:34.814663" elapsed="0.000495"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:34.816370" elapsed="0.000345"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:34.811139" elapsed="0.005646"/>
</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-10-06T01:23:34.810578" elapsed="0.006327"/>
</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="PASS" start="2026-10-06T01:23:34.685128" elapsed="0.131854"/>
</kw>
<msg time="2026-10-06T01:23:34.817067" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:34.817108" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:34.684343" elapsed="0.132798"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:34.817312" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:23:34.817211" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.817194" elapsed="0.000197"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:34.817841" elapsed="0.000024"/>
</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-10-06T01:23:34.818176" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:34.818242" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:34.683744" elapsed="0.134606"/>
</kw>
<msg time="2026-10-06T01:23:34.818454" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:34.818496" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:34.681885" elapsed="0.136644"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:34.818842" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:34.818602" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.818585" elapsed="0.000329"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:34.681746" elapsed="0.137190"/>
</iter>
<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-10-06T01:23:34.821632" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:34.821538" elapsed="0.000361"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.821515" elapsed="0.000409"/>
</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-10-06T01:23:34.823061" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:34.822966" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.822943" elapsed="0.000182"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:34.823523" level="INFO">${karaf_connection_index} = 14</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-10-06T01:23:34.823272" elapsed="0.000275"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:34.823936" 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-10-06T01:23:34.823725" elapsed="0.000236"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:34.860203" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:34.824547" elapsed="0.035846"/>
</kw>
<msg time="2026-10-06T01:23:34.860555" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:34.860597" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:34.824115" elapsed="0.036517"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:34.970636" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:34.861269" elapsed="0.109580"/>
</kw>
<msg time="2026-10-06T01:23:34.971016" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:34.971059" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:34.860838" elapsed="0.110256"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:34.971384" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:34.971165" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.971146" elapsed="0.000333"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:34.972032" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:34.971664" elapsed="0.000454"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:34.972405" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:34.972180" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.972163" elapsed="0.000340"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:34.972534" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:34.975122" elapsed="0.000536"/>
</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-10-06T01:23:34.977053" elapsed="0.000493"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:34.978721" elapsed="0.000318"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:34.973370" elapsed="0.005741"/>
</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-10-06T01:23:34.972842" elapsed="0.006395"/>
</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="PASS" start="2026-10-06T01:23:34.822695" elapsed="0.156632"/>
</kw>
<msg time="2026-10-06T01:23:34.979411" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:34.979450" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:34.822073" elapsed="0.157411"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:34.979639" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:34.979553" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.979536" elapsed="0.000210"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:34.980057" elapsed="0.000023"/>
</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-10-06T01:23:34.980367" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:34.980431" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:23:34.821212" elapsed="0.159340"/>
</kw>
<msg time="2026-10-06T01:23:34.980636" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:34.980806" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:34.819199" elapsed="0.161644"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:34.981131" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:34.980913" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.980897" elapsed="0.000306"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:34.819060" elapsed="0.162164"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:34.552211" elapsed="0.429040"/>
</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-10-06T01:23:34.549227" elapsed="0.432090"/>
</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-10-06T01:23:34.546471" elapsed="0.434900"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:34.545897" elapsed="0.435517"/>
</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-10-06T01:23:34.544434" elapsed="0.437029"/>
</kw>
<kw name="Add Sample Tap Device To The Manual Bridge And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:34.985222" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:34.984991" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:34.984974" elapsed="0.000336"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:34.985626" 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-10-06T01:23:34.985733" 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-10-06T01:23:34.985499" elapsed="0.000259"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:34.986230" level="INFO">Attempting to execute command "sudo ovs-vsctl add-port br-s1 vport1 -- add-port br-s1 vport2" on remote system "10.30.170.234" 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-10-06T01:23:34.985945" elapsed="0.000327"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:34.986772" level="INFO">${conn_id} = 164</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-10-06T01:23:34.986459" elapsed="0.000338"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:23:34.987615" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:23:34.987699" 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-10-06T01:23:34.987355" elapsed="0.000369"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:34.987870" elapsed="0.000279"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:23:34.988929" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:23:35.382565" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:23:30 UTC 2026

  System load:  0.17               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:23:34 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:23:34.988694" elapsed="0.393958"/>
</kw>
<msg time="2026-10-06T01:23:35.382729" 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-10-06T01:23:34.988321" elapsed="0.394472"/>
</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-10-06T01:23:34.986986" elapsed="0.395929"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:23:35.383390" level="INFO">Executing command 'sudo ovs-vsctl add-port br-s1 vport1 -- add-port br-s1 vport2'.</msg>
<msg time="2026-10-06T01:23:35.416608" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:23:35.416867" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:23:35.416956" level="INFO">${stderr} = ovs-vsctl: Error detected while setting up 'vport1': could not open network device vport1 (No such device).  See ovs-vswitchd log for details.
ovs-vsctl: Error detected while setting up 'vport2': coul...</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-10-06T01:23:35.383130" elapsed="0.033876"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:35.417373" elapsed="0.000457"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.418868" level="INFO">ovs-vsctl: Error detected while setting up 'vport1': could not open network device vport1 (No such device).  See ovs-vswitchd log for details.
ovs-vsctl: Error detected while setting up 'vport2': could not open network device vport2 (No such device).  See ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/var/log/openvswitch".</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.418287" elapsed="0.000679"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:35.419346" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:35.419111" elapsed="0.000334"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.419068" 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-10-06T01:23:35.419812" elapsed="0.000055"/>
</return>
<status status="PASS" start="2026-10-06T01:23:35.419598" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.419568" elapsed="0.000443"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:35.420104" elapsed="0.000044"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:35.421765" elapsed="0.000664"/>
</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-10-06T01:23:35.422879" elapsed="0.000314"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:35.423534" elapsed="0.000231"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:35.420833" elapsed="0.003038"/>
</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-10-06T01:23:34.984366" elapsed="0.439656"/>
</kw>
<msg time="2026-10-06T01:23:35.424124" 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-10-06T01:23:34.983839" elapsed="0.440386"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-port br-s1 vport1 -- add-port br-s1 vport2</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:23:34.983403" elapsed="0.441003"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.425573" level="INFO">${dictionary_operational} = {'vport1': '2', 'vport2': '2'}</msg>
<var>${dictionary_operational}</var>
<arg>vport1=2</arg>
<arg>vport2=2</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:23:35.424866" elapsed="0.000762"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.426835" level="INFO">${dictionary_config} = {'vport1': '0', 'vport2': '0'}</msg>
<var>${dictionary_config}</var>
<arg>vport1=0</arg>
<arg>vport2=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:23:35.426081" elapsed="0.000810"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.435356" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:35.434882" elapsed="0.000510"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.436002" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:35.435599" elapsed="0.000437"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:35.436092" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:23:35.436269" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:35.434373" elapsed="0.001944"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.439982" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:23:35.439587" elapsed="0.000429"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:35.440135" elapsed="0.000039"/>
</return>
<msg time="2026-10-06T01:23:35.440328" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:35.439124" elapsed="0.001237"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.442001" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.441668" elapsed="0.000391"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.442643" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.442334" elapsed="0.000385"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:35.451405" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:23:35.451603" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '144'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:23:35.451781" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:23:35.443121" elapsed="0.008695"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.442807" elapsed="0.009066"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.452124" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:35.451909" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.442783" elapsed="0.009452"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.454049" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.453554" elapsed="0.000558"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.453205" elapsed="0.000954"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.453180" elapsed="0.001011"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.455009" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.454610" elapsed="0.000458"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.454262" elapsed="0.000851"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.454241" elapsed="0.000905"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.455936" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:35.455409" elapsed="0.000562"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.456368" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:35.456062" elapsed="0.000381"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.457087" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:35.456716" elapsed="0.000405"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.456474" elapsed="0.000692"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.456039" elapsed="0.001155"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.457936" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:35.457444" elapsed="0.000528"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.458357" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:35.458060" elapsed="0.000370"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.459062" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:35.458696" elapsed="0.000401"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.458461" elapsed="0.000681"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.458037" elapsed="0.001133"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:35.459380" elapsed="0.000439"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:23:35.460394" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:35.460038" elapsed="0.000391"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:23:35.460636" elapsed="0.000339"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:23:35.452727" elapsed="0.008595"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:23:35.461538" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-10-06T01:23:35.461416" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.461391" elapsed="0.000259"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.461894" elapsed="0.000029"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:23:35.461984" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:23:35.462288" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:23:35.440808" elapsed="0.021536"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:23:35.462410" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:23:35.462579" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:23:35.438532" elapsed="0.024083"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.464088" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:35.463635" elapsed="0.000540"/>
</kw>
<var name="${item}">vport1</var>
<status status="PASS" start="2026-10-06T01:23:35.463412" elapsed="0.000813"/>
</iter>
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.465002" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:35.464567" elapsed="0.000518"/>
</kw>
<var name="${item}">vport2</var>
<status status="PASS" start="2026-10-06T01:23:35.464350" elapsed="0.000785"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:23:35.463242" elapsed="0.001931"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:23:35.462925" elapsed="0.002317"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:35.436553" elapsed="0.028731"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.468894" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:35.468496" elapsed="0.000433"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:35.468987" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:23:35.469155" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:35.468036" elapsed="0.001151"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.470819" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.470491" elapsed="0.000387"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.471706" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.471137" elapsed="0.000628"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:35.485712" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0196abtsaqd8g4mpvcap0t4mk0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:23:35.485902" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:23:35.486043" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:23:35.472174" elapsed="0.013904"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.471855" elapsed="0.014283"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.486444" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:35.486179" elapsed="0.000350"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.471831" elapsed="0.014726"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.488449" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.487948" elapsed="0.000634"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.487584" elapsed="0.001043"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.487557" elapsed="0.001102"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.489480" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.489086" elapsed="0.000453"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.488752" elapsed="0.000831"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.488730" elapsed="0.000884"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.490410" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:35.489889" elapsed="0.000557"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.490842" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:35.490536" elapsed="0.000382"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.491558" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:35.491168" elapsed="0.000425"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.490949" elapsed="0.000689"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.490513" elapsed="0.001153"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.492421" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:35.491932" elapsed="0.000525"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.492849" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:35.492546" elapsed="0.000379"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.493591" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:35.493174" elapsed="0.000451"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.492956" elapsed="0.000716"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.492523" elapsed="0.001204"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:35.493952" elapsed="0.000453"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:23:35.495034" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:35.494640" elapsed="0.000430"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:23:35.495284" elapsed="0.000320"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:23:35.487061" elapsed="0.008644"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:23:35.495912" elapsed="0.000042"/>
</return>
<status status="PASS" start="2026-10-06T01:23:35.495794" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.495771" elapsed="0.000259"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.496229" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:23:35.496339" elapsed="0.000023"/>
</return>
<msg time="2026-10-06T01:23:35.496644" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:23:35.469611" elapsed="0.027089"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:23:35.496766" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:23:35.496936" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:23:35.467445" elapsed="0.029524"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.498475" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:35.498020" elapsed="0.000543"/>
</kw>
<var name="${item}">vport1</var>
<status status="PASS" start="2026-10-06T01:23:35.497797" elapsed="0.000816"/>
</iter>
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.499391" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:35.498959" elapsed="0.000515"/>
</kw>
<var name="${item}">vport2</var>
<status status="PASS" start="2026-10-06T01:23:35.498738" elapsed="0.000786"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:23:35.497623" elapsed="0.001938"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:23:35.497278" elapsed="0.002421"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:35.465414" elapsed="0.034332"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.503546" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:35.503153" elapsed="0.000427"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:35.503638" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:23:35.503831" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:35.502708" elapsed="0.001155"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.505495" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.505163" elapsed="0.000390"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.506140" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.505836" elapsed="0.000360"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:35.521724" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0gusd5pkzmwglcb3p20r9r8j10.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:23:35.521825" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:23:35.521909" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:23:35.506615" elapsed="0.015318"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.506280" elapsed="0.015692"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.522146" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:35.521995" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.506256" elapsed="0.015967"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.523555" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.523208" elapsed="0.000390"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.522968" elapsed="0.000662"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.522951" elapsed="0.000701"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.524227" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.523961" elapsed="0.000307"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.523721" elapsed="0.000589"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.523704" elapsed="0.000630"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.524860" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:35.524504" elapsed="0.000381"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.525150" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:35.524948" elapsed="0.000254"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.525654" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:35.525393" elapsed="0.000299"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.525225" elapsed="0.000501"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.524932" elapsed="0.000814"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.526247" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:35.525914" elapsed="0.000358"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.526551" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:35.526348" elapsed="0.000255"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.527068" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:35.526806" elapsed="0.000286"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.526625" elapsed="0.000499"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.526331" elapsed="0.000813"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:35.527282" elapsed="0.000368"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:23:35.528077" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:35.527859" elapsed="0.000243"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:23:35.528251" elapsed="0.000222"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:23:35.522615" elapsed="0.005914"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:23:35.528672" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-10-06T01:23:35.528591" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.528575" elapsed="0.000191"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.528906" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:23:35.528969" elapsed="0.000015"/>
</return>
<msg time="2026-10-06T01:23:35.529184" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:23:35.504276" elapsed="0.024933"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:23:35.529255" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:23:35.529391" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:23:35.502087" elapsed="0.027327"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.530579" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:35.530260" elapsed="0.000379"/>
</kw>
<var name="${item}">vport1</var>
<status status="PASS" start="2026-10-06T01:23:35.530100" elapsed="0.000589"/>
</iter>
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.531221" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:35.530926" elapsed="0.000354"/>
</kw>
<var name="${item}">vport2</var>
<status status="PASS" start="2026-10-06T01:23:35.530767" elapsed="0.000561"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:23:35.529854" elapsed="0.001502"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:23:35.529614" elapsed="0.001790"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:35.499861" elapsed="0.031574"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:35.436391" elapsed="0.095070"/>
</for>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:23:35.433670" elapsed="0.097839"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:23:35.427347" elapsed="0.104213"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.535974" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:35.535633" elapsed="0.000367"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.536439" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:35.536149" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:35.536504" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:23:35.536629" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:35.535266" elapsed="0.001385"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.539231" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:23:35.538966" elapsed="0.000290"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:35.539308" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:23:35.539436" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:35.538635" elapsed="0.000859"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.540769" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.540533" elapsed="0.000278"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.541217" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.540998" elapsed="0.000259"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:35.550117" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:23:35.550283" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '7267'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;c31ebfa2-624b-423b-b118-add4b24bc922&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;f96ec6f2-d93b-4281-9e4e-46fbfd8d0b2b&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;209ababd-0735-4d17-9bd1-80cc348df6fa&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;a2:bf:1e:c3:3b:42&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;6&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vport2&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;f55d4b11-159f-48e3-9904-90de963bc56e&lt;/port-uuid&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;d69facdb-3959-443c-a8f3-1fe732b9bb58&lt;/interface-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vport2&lt;/name&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vx1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8ca9dd9a-6b68-41da-8b1b-5f4d9aa11808&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vx1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;1b7c8bfc-2417-45e2-936f-eb08a1699929&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vport1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;5c3e879f-c302-400e-9358-274d535c89f8&lt;/port-uuid&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;b3ee9f6b-029d-4162-9b56-c72d51da3ef5&lt;/interface-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vport1&lt;/name&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:a2:bf:1e:c3:3b:42&lt;/datapath-id&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:23:35.550514" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:23:35.541557" elapsed="0.008986"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.541331" elapsed="0.009251"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.550786" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:35.550606" elapsed="0.000242"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.541313" elapsed="0.009555"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.552184" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;c31ebfa2-624b-423b-b118-add4b24bc922&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;f96ec6f2-d93b-4281-9e4e-46fbfd8d0b2b&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;209ababd-0735-4d17-9bd1-80cc348df6fa&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;a2:bf:1e:c3:3b:42&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;6&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vport2&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;f55d4b11-159f-48e3-9904-90de963bc56e&lt;/port-uuid&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;d69facdb-3959-443c-a8f3-1fe732b9bb58&lt;/interface-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vport2&lt;/name&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vx1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8ca9dd9a-6b68-41da-8b1b-5f4d9aa11808&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vx1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;1b7c8bfc-2417-45e2-936f-eb08a1699929&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vport1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;5c3e879f-c302-400e-9358-274d535c89f8&lt;/port-uuid&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;b3ee9f6b-029d-4162-9b56-c72d51da3ef5&lt;/interface-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vport1&lt;/name&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:a2:bf:1e:c3:3b:42&lt;/datapath-id&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.551801" elapsed="0.000550"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.551538" elapsed="0.000846"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.551521" elapsed="0.000886"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.552980" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.552711" elapsed="0.000310"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.552458" elapsed="0.000594"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.552442" elapsed="0.000632"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.553604" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:35.553245" elapsed="0.000384"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.554055" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:35.553843" elapsed="0.000266"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.554570" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:35.554289" elapsed="0.000306"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.554132" elapsed="0.000497"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.553691" elapsed="0.000957"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.555179" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:35.554838" elapsed="0.000366"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.555485" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:35.555269" elapsed="0.000269"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.555997" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:35.555732" elapsed="0.000289"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.555560" elapsed="0.000494"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.555252" elapsed="0.000822"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:35.556213" elapsed="0.000309"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:23:35.556916" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:35.556693" elapsed="0.000247"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:23:35.557088" elapsed="0.000207"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:23:35.551184" elapsed="0.006179"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:23:35.557506" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:23:35.557425" elapsed="0.000136"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.557409" elapsed="0.000175"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.557737" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:23:35.557802" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:23:35.558072" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1&lt;/node-id...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:23:35.539807" elapsed="0.018292"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:23:35.558145" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:23:35.558265" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1&lt;/node-id...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:23:35.538221" elapsed="0.020069"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.559364" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:35.559004" elapsed="0.000452"/>
</kw>
<var name="${item}">vport1</var>
<status status="PASS" start="2026-10-06T01:23:35.558847" elapsed="0.000645"/>
</iter>
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.560038" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:35.559738" elapsed="0.000390"/>
</kw>
<var name="${item}">vport2</var>
<status status="PASS" start="2026-10-06T01:23:35.559564" elapsed="0.000667"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:23:35.558746" elapsed="0.001514"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:23:35.558509" elapsed="0.001811"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:35.536823" elapsed="0.023529"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.562854" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:35.562571" elapsed="0.000308"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:35.562920" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:23:35.563041" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:35.562243" elapsed="0.000821"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.564207" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.563988" elapsed="0.000260"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.564665" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.564449" elapsed="0.000276"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:35.579473" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0196abtsaqd8g4mpvcap0t4mk0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:23:35.579736" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '3218'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"c31ebfa2-624b-423b-b118-add4b24bc922","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"f96ec6f2-d93b-4281-9e4e-46fbfd8d0b2b","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"209ababd-0735-4d17-9bd1-80cc348df6fa","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"a2:bf:1e:c3:3b:42","ovsdb:ofport":65534,"ovsdb:ifindex":6},{"tp-id":"vport2","ovsdb:port-uuid":"f55d4b11-159f-48e3-9904-90de963bc56e","ovsdb:interface-uuid":"d69facdb-3959-443c-a8f3-1fe732b9bb58","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport2","ovsdb:ingress-policing-rate":0},{"tp-id":"vx1","ovsdb:port-uuid":"8ca9dd9a-6b68-41da-8b1b-5f4d9aa11808","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"1b7c8bfc-2417-45e2-936f-eb08a1699929","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"},{"tp-id":"vport1","ovsdb:port-uuid":"5c3e879f-c302-400e-9358-274d535c89f8","ovsdb:interface-uuid":"b3ee9f6b-029d-4162-9b56-c72d51da3ef5","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport1","ovsdb:ingress-policing-rate":0}],"ovsdb:datapath-id":"00:00:a2:bf:1e:c3:3b:42"},{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']"}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:23:35.579926" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:23:35.565016" elapsed="0.014952"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.564788" elapsed="0.015248"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.580233" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:35.580069" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.564771" elapsed="0.015553"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.581815" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"c31ebfa2-624b-423b-b118-add4b24bc922","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"f96ec6f2-d93b-4281-9e4e-46fbfd8d0b2b","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"209ababd-0735-4d17-9bd1-80cc348df6fa","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"a2:bf:1e:c3:3b:42","ovsdb:ofport":65534,"ovsdb:ifindex":6},{"tp-id":"vport2","ovsdb:port-uuid":"f55d4b11-159f-48e3-9904-90de963bc56e","ovsdb:interface-uuid":"d69facdb-3959-443c-a8f3-1fe732b9bb58","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport2","ovsdb:ingress-policing-rate":0},{"tp-id":"vx1","ovsdb:port-uuid":"8ca9dd9a-6b68-41da-8b1b-5f4d9aa11808","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"1b7c8bfc-2417-45e2-936f-eb08a1699929","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"},{"tp-id":"vport1","ovsdb:port-uuid":"5c3e879f-c302-400e-9358-274d535c89f8","ovsdb:interface-uuid":"b3ee9f6b-029d-4162-9b56-c72d51da3ef5","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport1","ovsdb:ingress-policing-rate":0}],"ovsdb:datapath-id":"00:00:a2:bf:1e:c3:3b:42"},{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']"}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.581245" elapsed="0.000673"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.581006" elapsed="0.000945"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.580987" elapsed="0.000987"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.582549" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.582264" elapsed="0.000327"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.582027" elapsed="0.000596"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.582011" elapsed="0.000634"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.583181" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:35.582834" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.583490" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:35.583272" elapsed="0.000272"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.584006" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:35.583740" elapsed="0.000290"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.583566" elapsed="0.000498"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.583255" elapsed="0.000829"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.584696" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:35.584292" elapsed="0.000431"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.584991" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:35.584790" elapsed="0.000254"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.585494" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:35.585216" elapsed="0.000302"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.585065" elapsed="0.000486"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.584773" elapsed="0.000798"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:35.585724" elapsed="0.000293"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:23:35.586409" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:35.586173" elapsed="0.000260"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:23:35.586583" elapsed="0.000229"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:23:35.580644" elapsed="0.006224"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:23:35.587011" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-10-06T01:23:35.586930" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.586913" elapsed="0.000179"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.587230" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:23:35.587293" elapsed="0.000028"/>
</return>
<msg time="2026-10-06T01:23:35.587571" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:23:35.563368" elapsed="0.024229"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:23:35.587642" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:23:35.587781" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:23:35.561837" elapsed="0.025968"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.588832" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:35.588508" elapsed="0.000400"/>
</kw>
<var name="${item}">vport1</var>
<status status="PASS" start="2026-10-06T01:23:35.588350" elapsed="0.000594"/>
</iter>
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.589487" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:35.589174" elapsed="0.000385"/>
</kw>
<var name="${item}">vport2</var>
<status status="PASS" start="2026-10-06T01:23:35.589018" elapsed="0.000608"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:23:35.588233" elapsed="0.001422"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:23:35.588008" elapsed="0.001712"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:35.560431" elapsed="0.029321"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.592278" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:35.592013" elapsed="0.000306"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:35.592362" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:23:35.592485" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:35.591692" elapsed="0.000815"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.593664" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.593443" elapsed="0.000279"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.594128" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.593910" elapsed="0.000258"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:35.609930" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0gusd5pkzmwglcb3p20r9r8j10.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:23:35.610082" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '3218'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"c31ebfa2-624b-423b-b118-add4b24bc922","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"f96ec6f2-d93b-4281-9e4e-46fbfd8d0b2b","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"209ababd-0735-4d17-9bd1-80cc348df6fa","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"a2:bf:1e:c3:3b:42","ovsdb:ofport":65534,"ovsdb:ifindex":6},{"tp-id":"vport2","ovsdb:port-uuid":"f55d4b11-159f-48e3-9904-90de963bc56e","ovsdb:interface-uuid":"d69facdb-3959-443c-a8f3-1fe732b9bb58","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport2","ovsdb:ingress-policing-rate":0},{"tp-id":"vx1","ovsdb:port-uuid":"8ca9dd9a-6b68-41da-8b1b-5f4d9aa11808","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"1b7c8bfc-2417-45e2-936f-eb08a1699929","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"},{"tp-id":"vport1","ovsdb:port-uuid":"5c3e879f-c302-400e-9358-274d535c89f8","ovsdb:interface-uuid":"b3ee9f6b-029d-4162-9b56-c72d51da3ef5","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport1","ovsdb:ingress-policing-rate":0}],"ovsdb:datapath-id":"00:00:a2:bf:1e:c3:3b:42"},{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']"}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:23:35.610190" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:23:35.594466" elapsed="0.015749"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.594228" elapsed="0.016026"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.610443" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:35.610278" elapsed="0.000224"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.594212" elapsed="0.016310"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.611994" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"c31ebfa2-624b-423b-b118-add4b24bc922","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"f96ec6f2-d93b-4281-9e4e-46fbfd8d0b2b","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"209ababd-0735-4d17-9bd1-80cc348df6fa","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"a2:bf:1e:c3:3b:42","ovsdb:ofport":65534,"ovsdb:ifindex":6},{"tp-id":"vport2","ovsdb:port-uuid":"f55d4b11-159f-48e3-9904-90de963bc56e","ovsdb:interface-uuid":"d69facdb-3959-443c-a8f3-1fe732b9bb58","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport2","ovsdb:ingress-policing-rate":0},{"tp-id":"vx1","ovsdb:port-uuid":"8ca9dd9a-6b68-41da-8b1b-5f4d9aa11808","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"1b7c8bfc-2417-45e2-936f-eb08a1699929","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"},{"tp-id":"vport1","ovsdb:port-uuid":"5c3e879f-c302-400e-9358-274d535c89f8","ovsdb:interface-uuid":"b3ee9f6b-029d-4162-9b56-c72d51da3ef5","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport1","ovsdb:ingress-policing-rate":0}],"ovsdb:datapath-id":"00:00:a2:bf:1e:c3:3b:42"},{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1']"}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.611602" elapsed="0.000486"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.611365" elapsed="0.000757"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.611347" elapsed="0.000798"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.612765" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.612454" elapsed="0.000354"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.612198" elapsed="0.000643"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.612182" elapsed="0.000682"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.613401" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:35.613038" elapsed="0.000389"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.613711" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:35.613492" elapsed="0.000274"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.614207" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:35.613945" elapsed="0.000286"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.613788" elapsed="0.000477"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.613475" elapsed="0.000810"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.614829" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:35.614470" elapsed="0.000384"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.615120" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:35.614918" elapsed="0.000254"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.615627" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:35.615364" elapsed="0.000288"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:35.615194" elapsed="0.000507"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.614902" elapsed="0.000820"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:35.615864" elapsed="0.000290"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:23:35.616546" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:35.616326" elapsed="0.000244"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:23:35.616739" elapsed="0.000210"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:23:35.610995" elapsed="0.006009"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:23:35.617148" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:35.617066" elapsed="0.000137"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.617050" elapsed="0.000175"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.617379" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:23:35.617444" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:23:35.617895" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:23:35.592825" elapsed="0.025107"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:23:35.617990" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:23:35.618119" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:23:35.591244" elapsed="0.026900"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.619199" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:35.618894" elapsed="0.000379"/>
</kw>
<var name="${item}">vport1</var>
<status status="PASS" start="2026-10-06T01:23:35.618735" elapsed="0.000591"/>
</iter>
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.619867" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:35.619556" elapsed="0.000385"/>
</kw>
<var name="${item}">vport2</var>
<status status="PASS" start="2026-10-06T01:23:35.619400" elapsed="0.000611"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:23:35.618593" elapsed="0.001446"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:23:35.618360" elapsed="0.001726"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:35.589832" elapsed="0.030285"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:35.536715" elapsed="0.083428"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:23:35.534787" elapsed="0.085401"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:23:35.531780" elapsed="0.088457"/>
</kw>
<doc>Add Tap Device vport1 and vport2 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:23:34.983021" elapsed="0.637291"/>
</kw>
<doc>Add tap devices to the bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="PASS" start="2026-10-06T01:23:34.543654" elapsed="1.076771"/>
</test>
<test id="s1-s1-s1-t34" name="Delete the Bridge Manually and Verify After Recover" line="166">
<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-10-06T01:23:35.621976" elapsed="0.000197"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:23:35.621730" elapsed="0.000492"/>
</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-10-06T01:23:35.623134" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:35.623047" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.623030" elapsed="0.000166"/>
</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-10-06T01:23:35.626662" elapsed="0.000027"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:35.626579" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.626562" elapsed="0.000178"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.627634" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:35.627293" elapsed="0.000367"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.628096" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:35.627826" elapsed="0.000294"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:35.628160" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:23:35.628285" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:35.626942" elapsed="0.001386"/>
</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-10-06T01:23:35.630709" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:35.630610" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.630593" elapsed="0.000180"/>
</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-10-06T01:23:35.631960" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:35.631876" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.631859" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:35.632402" 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-10-06T01:23:35.632162" elapsed="0.000265"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:35.632783" 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-10-06T01:23:35.632588" elapsed="0.000219"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:35.667096" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:35.633385" elapsed="0.033883"/>
</kw>
<msg time="2026-10-06T01:23:35.667480" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:35.667521" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:35.632959" elapsed="0.034595"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:35.758842" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:35.668177" elapsed="0.090873"/>
</kw>
<msg time="2026-10-06T01:23:35.759204" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:35.759246" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:35.667754" elapsed="0.091525"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.759565" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:35.759362" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.759344" elapsed="0.000315"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.760187" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.759855" elapsed="0.000413"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.760543" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:35.760345" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.760328" elapsed="0.000307"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:35.760666" elapsed="0.000046"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:35.763121" elapsed="0.000487"/>
</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-10-06T01:23:35.764865" elapsed="0.000601"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:35.766643" elapsed="0.000536"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:35.761464" elapsed="0.005781"/>
</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-10-06T01:23:35.760958" elapsed="0.006417"/>
</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="PASS" start="2026-10-06T01:23:35.631588" elapsed="0.135863"/>
</kw>
<msg time="2026-10-06T01:23:35.767533" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:35.767572" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:35.630917" elapsed="0.136688"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:35.767777" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:23:35.767690" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.767657" elapsed="0.000198"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:23:35.768171" elapsed="0.000024"/>
</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-10-06T01:23:35.768482" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:35.768546" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:23:35.630322" elapsed="0.138310"/>
</kw>
<msg time="2026-10-06T01:23:35.768808" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:35.768848" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:35.628650" elapsed="0.140231"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.769166" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:35.768950" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.768934" elapsed="0.000303"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:35.628512" elapsed="0.140746"/>
</iter>
<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-10-06T01:23:35.771597" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:35.771514" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.771496" elapsed="0.000208"/>
</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-10-06T01:23:35.772813" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:35.772726" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.772708" elapsed="0.000168"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:35.773238" level="INFO">${karaf_connection_index} = 12</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-10-06T01:23:35.773017" elapsed="0.000245"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:35.773606" 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-10-06T01:23:35.773435" elapsed="0.000195"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:35.809271" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:35.774212" elapsed="0.035287"/>
</kw>
<msg time="2026-10-06T01:23:35.809666" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:35.809732" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:35.773804" elapsed="0.035963"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:35.895991" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:35.810405" elapsed="0.085821"/>
</kw>
<msg time="2026-10-06T01:23:35.896430" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:35.896472" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:35.809949" elapsed="0.086556"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.896891" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:35.896604" elapsed="0.000362"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.896575" elapsed="0.000416"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:35.897582" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:35.897172" elapsed="0.000495"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.897944" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:35.897747" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.897730" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:35.898070" elapsed="0.000035"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:35.900698" elapsed="0.000485"/>
</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-10-06T01:23:35.902437" elapsed="0.000495"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:35.904293" elapsed="0.000534"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:35.898962" elapsed="0.005935"/>
</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-10-06T01:23:35.898406" elapsed="0.006607"/>
</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="PASS" start="2026-10-06T01:23:35.772446" elapsed="0.132643"/>
</kw>
<msg time="2026-10-06T01:23:35.905174" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:35.905213" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:35.771856" elapsed="0.133391"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:35.905418" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:23:35.905331" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.905298" elapsed="0.000251"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.905923" elapsed="0.000025"/>
</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-10-06T01:23:35.906228" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:35.906293" 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="PASS" start="2026-10-06T01:23:35.771215" elapsed="0.135181"/>
</kw>
<msg time="2026-10-06T01:23:35.906481" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:35.906521" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:35.769523" elapsed="0.137032"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:35.906949" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:35.906624" elapsed="0.000374"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.906608" elapsed="0.000412"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:35.769382" elapsed="0.137660"/>
</iter>
<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-10-06T01:23:35.909465" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:35.909380" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.909360" elapsed="0.000168"/>
</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-10-06T01:23:35.910625" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:35.910541" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:35.910524" elapsed="0.000186"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:35.911084" level="INFO">${karaf_connection_index} = 14</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-10-06T01:23:35.910854" elapsed="0.000254"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:35.911456" 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-10-06T01:23:35.911268" elapsed="0.000211"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:35.949270" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:35.912064" elapsed="0.037396"/>
</kw>
<msg time="2026-10-06T01:23:35.949620" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:35.949662" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:35.911634" elapsed="0.038087"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:36.041124" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:35.950319" elapsed="0.091009"/>
</kw>
<msg time="2026-10-06T01:23:36.041495" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:36.041538" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:35.949887" elapsed="0.091684"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:36.041879" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:36.041644" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.041625" elapsed="0.000350"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.042514" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:36.042156" elapsed="0.000443"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:36.042913" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:36.042661" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.042645" elapsed="0.000363"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:36.043039" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:36.045518" elapsed="0.000504"/>
</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-10-06T01:23:36.047258" elapsed="0.000492"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:36.049139" elapsed="0.000461"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:36.043840" elapsed="0.005829"/>
</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-10-06T01:23:36.043318" elapsed="0.006487"/>
</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="PASS" start="2026-10-06T01:23:35.910265" elapsed="0.139618"/>
</kw>
<msg time="2026-10-06T01:23:36.049967" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:36.050006" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:35.909689" elapsed="0.140351"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:36.050196" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:23:36.050111" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.050094" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:36.050604" elapsed="0.000024"/>
</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-10-06T01:23:36.050999" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:36.051064" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:35.909070" elapsed="0.142079"/>
</kw>
<msg time="2026-10-06T01:23:36.051233" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:36.051272" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:35.907298" elapsed="0.144019"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:36.051604" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:36.051387" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.051371" elapsed="0.000320"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:35.907160" elapsed="0.144555"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:35.628377" elapsed="0.423366"/>
</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-10-06T01:23:35.626267" elapsed="0.425530"/>
</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-10-06T01:23:35.622794" elapsed="0.429056"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:35.622385" elapsed="0.429509"/>
</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-10-06T01:23:35.621374" elapsed="0.430570"/>
</kw>
<kw name="Delete Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:36.055410" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:36.055160" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.055143" elapsed="0.000342"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:36.055822" 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-10-06T01:23:36.055914" 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-10-06T01:23:36.055694" elapsed="0.000275"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.056460" level="INFO">Attempting to execute command "sudo ovs-vsctl del-br br-s1" on remote system "10.30.170.234" 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-10-06T01:23:36.056158" elapsed="0.000345"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:36.057001" level="INFO">${conn_id} = 169</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-10-06T01:23:36.056693" elapsed="0.000332"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.057871" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:23:36.057953" 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-10-06T01:23:36.057590" elapsed="0.000387"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:36.058126" elapsed="0.000297"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:23:36.059200" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:23:36.454152" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:23:30 UTC 2026

  System load:  0.17               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:23:35 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:23:36.058970" elapsed="0.395289"/>
</kw>
<msg time="2026-10-06T01:23:36.454339" 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-10-06T01:23:36.058586" elapsed="0.395826"/>
</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-10-06T01:23:36.057220" elapsed="0.397284"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:23:36.454948" level="INFO">Executing command 'sudo ovs-vsctl del-br br-s1'.</msg>
<msg time="2026-10-06T01:23:36.548562" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:23:36.548830" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:23:36.548921" level="INFO">${stderr} = </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-10-06T01:23:36.454754" elapsed="0.094215"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:36.549350" elapsed="0.000466"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.550915" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:36.550296" elapsed="0.000706"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:36.551407" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:36.551158" elapsed="0.000348"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.551111" elapsed="0.000443"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:23:36.551878" elapsed="0.000054"/>
</return>
<status status="PASS" start="2026-10-06T01:23:36.551661" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.551630" elapsed="0.000419"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:36.552116" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:36.553757" elapsed="0.000667"/>
</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-10-06T01:23:36.554868" elapsed="0.000316"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:36.555519" elapsed="0.000229"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:36.552805" elapsed="0.003048"/>
</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-10-06T01:23:36.054745" elapsed="0.501261"/>
</kw>
<msg time="2026-10-06T01:23:36.556111" 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-10-06T01:23:36.054198" elapsed="0.502014"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl del-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:23:36.053783" elapsed="0.502716"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.557655" level="INFO">${dictionary} = {'br-s1': '0'}</msg>
<var>${dictionary}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:23:36.556964" elapsed="0.000777"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.565106" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:36.564332" elapsed="0.000830"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.566169" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:36.565524" elapsed="0.000700"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:36.566339" elapsed="0.000061"/>
</return>
<msg time="2026-10-06T01:23:36.566625" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:36.563474" elapsed="0.003230"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.572627" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:23:36.572005" elapsed="0.000715"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:36.572815" elapsed="0.000058"/>
</return>
<msg time="2026-10-06T01:23:36.573087" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:36.571237" elapsed="0.001901"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.575822" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:36.575274" elapsed="0.000642"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.576874" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:36.576354" elapsed="0.000610"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:36.587649" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:23:36.588035" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3480'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:23:36.588437" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:23:36.577627" elapsed="0.010867"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:36.577098" elapsed="0.011483"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:36.589010" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:36.588636" elapsed="0.000503"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.577061" elapsed="0.012124"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.592190" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;60456&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value&gt;743a4f9b-d3a2-4785-a990-983f8a58f464&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:36.591301" elapsed="0.001097"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:36.590766" elapsed="0.001706"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.590724" elapsed="0.001801"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.593885" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:36.593209" elapsed="0.000771"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:36.592641" elapsed="0.001410"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.592606" elapsed="0.001497"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.595406" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:36.594537" elapsed="0.000928"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:36.596352" elapsed="0.000058"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:36.595610" elapsed="0.000883"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.597566" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:36.596942" elapsed="0.000679"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:36.596546" elapsed="0.001179"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.595573" elapsed="0.002200"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.598982" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:36.598149" elapsed="0.000889"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:36.599656" elapsed="0.000076"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:36.599182" elapsed="0.000688"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.600926" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:36.600278" elapsed="0.000703"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:36.599924" elapsed="0.001128"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.599144" elapsed="0.001953"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:36.601433" elapsed="0.000696"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:23:36.603066" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:36.602504" elapsed="0.000617"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:23:36.603484" elapsed="0.000509"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:23:36.589952" elapsed="0.014165"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:23:36.604461" elapsed="0.000056"/>
</return>
<status status="PASS" start="2026-10-06T01:23:36.604255" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.604216" elapsed="0.000418"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:36.604978" elapsed="0.000045"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:23:36.605120" elapsed="0.000031"/>
</return>
<msg time="2026-10-06T01:23:36.605759" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:23:36.573855" elapsed="0.031969"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:23:36.605928" elapsed="0.000056"/>
</return>
<msg time="2026-10-06T01:23:36.606199" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:23:36.570272" elapsed="0.035985"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.608637" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:36.607911" elapsed="0.000914"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:23:36.607521" elapsed="0.001385"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:23:36.607264" elapsed="0.001706"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:23:36.606761" elapsed="0.002315"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:36.567079" elapsed="0.042067"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.613079" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:36.612699" elapsed="0.000415"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:36.613171" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:23:36.613360" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:36.612215" elapsed="0.001178"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.615033" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:36.614718" elapsed="0.000374"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.615692" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:36.615370" elapsed="0.000380"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:36.629459" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0196abtsaqd8g4mpvcap0t4mk0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:23:36.629629" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '1487'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:23:36.629838" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:23:36.616150" elapsed="0.013725"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:36.615835" elapsed="0.014096"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:36.630175" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:36.629964" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.615812" elapsed="0.014475"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.632110" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:36.631597" elapsed="0.000587"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:36.631247" elapsed="0.000982"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.631221" elapsed="0.001041"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.633084" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:36.632702" elapsed="0.000439"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:36.632352" elapsed="0.000833"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.632328" elapsed="0.000889"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.633983" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:36.633471" elapsed="0.000548"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:36.634408" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:36.634109" elapsed="0.000374"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.635120" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:36.634750" elapsed="0.000405"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:36.634514" elapsed="0.000686"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.634086" elapsed="0.001142"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.635969" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:36.635477" elapsed="0.000528"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:36.636391" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:36.636095" elapsed="0.000370"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.637098" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:36.636731" elapsed="0.000401"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:36.636496" elapsed="0.000681"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.636072" elapsed="0.001133"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:36.637420" elapsed="0.000428"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:23:36.638392" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:36.638066" elapsed="0.000361"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:23:36.638633" elapsed="0.000312"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:23:36.630769" elapsed="0.008256"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:23:36.639224" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:23:36.639111" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.639088" elapsed="0.000259"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:36.639586" elapsed="0.000029"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:23:36.639696" elapsed="0.000022"/>
</return>
<msg time="2026-10-06T01:23:36.640035" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:23:36.613828" elapsed="0.026244"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:23:36.640136" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:23:36.640306" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:23:36.611588" elapsed="0.028770"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.641811" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:36.641366" elapsed="0.000535"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:23:36.641128" elapsed="0.000824"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:23:36.640984" elapsed="0.001005"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:23:36.640642" elapsed="0.001413"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:36.609349" elapsed="0.032749"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.645663" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:36.645273" elapsed="0.000444"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:36.645777" elapsed="0.000047"/>
</return>
<msg time="2026-10-06T01:23:36.645957" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:36.644825" elapsed="0.001164"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.647591" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:36.647272" elapsed="0.000377"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.648458" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:36.647930" elapsed="0.000587"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:36.662289" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0gusd5pkzmwglcb3p20r9r8j10.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:23:36.662484" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '1487'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:23:36.662618" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:23:36.648941" elapsed="0.013711"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:36.648604" elapsed="0.014135"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:36.662985" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:36.662774" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.648580" elapsed="0.014516"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.664989" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":60456,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":"743a4f9b-d3a2-4785-a990-983f8a58f464"},{"external-id-key":"hostname","external-id-value":"ubuntu-22-04-mininet-ovs-217-77788349-36a9-4206-a532-331cd2825a"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:36.664481" elapsed="0.000627"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:36.664096" elapsed="0.001058"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.664071" elapsed="0.001115"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.666014" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:36.665611" elapsed="0.000462"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:36.665259" elapsed="0.000858"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.665237" elapsed="0.000913"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.666912" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:36.666406" elapsed="0.000542"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:36.667341" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:36.667038" elapsed="0.000379"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.668061" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:36.667670" elapsed="0.000426"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:36.667450" elapsed="0.000692"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.667014" elapsed="0.001156"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.668926" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:36.668426" elapsed="0.000536"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:36.669357" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:36.669056" elapsed="0.000376"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.670070" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:36.669702" elapsed="0.000402"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:36.669464" elapsed="0.000685"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.669029" elapsed="0.001148"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:36.670388" elapsed="0.000432"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:23:36.671360" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:36.671038" elapsed="0.000358"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:23:36.671604" elapsed="0.000316"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:23:36.663555" elapsed="0.008443"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:23:36.672197" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-10-06T01:23:36.672085" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.672062" elapsed="0.000246"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:36.672519" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:23:36.672608" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:23:36.672965" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:23:36.646413" elapsed="0.026588"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:23:36.673065" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:23:36.673234" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/ef5e6311-6bc3-45eb-bec5-977d25c19a20","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:23:36.644214" elapsed="0.029054"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.674756" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:36.674294" elapsed="0.000552"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:23:36.674074" elapsed="0.000822"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:23:36.673929" elapsed="0.001005"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:23:36.673567" elapsed="0.001433"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:36.642208" elapsed="0.032885"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:36.566823" elapsed="0.108309"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary {'br-s1': '0'}.</doc>
<status status="PASS" start="2026-10-06T01:23:36.562359" elapsed="0.112840"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:23:36.558179" elapsed="0.117086"/>
</kw>
<doc>Delete bridge br-s1 using OVS command and verify it gets applied in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:23:36.053393" elapsed="0.621979"/>
</kw>
<doc>Delete bridge with OVS command and verify it gets deleted from all instances.</doc>
<status status="PASS" start="2026-10-06T01:23:35.620760" elapsed="1.054758"/>
</test>
<test id="s1-s1-s1-t35" name="Verify Modified Port After Recover" line="170">
<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-10-06T01:23:36.677494" elapsed="0.000299"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:23:36.677133" elapsed="0.000729"/>
</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-10-06T01:23:36.679122" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:36.679003" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.678977" elapsed="0.000234"/>
</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-10-06T01:23:36.682133" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:36.682015" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.681992" elapsed="0.000229"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.683510" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:36.683034" elapsed="0.000512"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.684157" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:36.683775" elapsed="0.000416"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:36.684249" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:23:36.684445" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:36.682517" elapsed="0.001961"/>
</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-10-06T01:23:36.687856" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:36.687737" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.687711" elapsed="0.000233"/>
</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-10-06T01:23:36.689252" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:36.689169" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.689151" elapsed="0.000179"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:36.689721" 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-10-06T01:23:36.689474" elapsed="0.000273"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:36.690084" 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-10-06T01:23:36.689910" elapsed="0.000198"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:36.724066" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:36.690707" elapsed="0.033536"/>
</kw>
<msg time="2026-10-06T01:23:36.724446" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:36.724488" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:36.690261" elapsed="0.034262"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:36.786713" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "M "o "d "i "f "i "e "d "[C "P "o "r "t "[C "A "f "[78Ct "[A[78Ce
 "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:36.725126" elapsed="0.061768"/>
</kw>
<msg time="2026-10-06T01:23:36.787089" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:36.787131" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:36.724703" elapsed="0.062463"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:36.787455" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:36.787236" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.787218" elapsed="0.000333"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.788095" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "M "o "d "i "f "i "e "d "[C "P "o "r "t "[C "A "f "[78Ct "[A[78Ce
 "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:36.787753" elapsed="0.000421"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:36.788447" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:36.788235" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.788219" elapsed="0.000324"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:36.788574" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:36.791070" elapsed="0.000664"/>
</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-10-06T01:23:36.792980" elapsed="0.000612"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:36.794977" elapsed="0.000312"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:36.789367" elapsed="0.006004"/>
</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-10-06T01:23:36.788861" elapsed="0.006630"/>
</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="PASS" start="2026-10-06T01:23:36.688910" elapsed="0.106657"/>
</kw>
<msg time="2026-10-06T01:23:36.795648" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:36.795759" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:36.688198" elapsed="0.107598"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:36.795951" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:36.795867" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.795849" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:23:36.796356" elapsed="0.000024"/>
</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-10-06T01:23:36.796652" elapsed="0.000038"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:36.796733" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:23:36.687298" elapsed="0.109522"/>
</kw>
<msg time="2026-10-06T01:23:36.796902" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:36.796941" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:36.684953" elapsed="0.112023"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:36.797259" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:36.797043" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.797027" elapsed="0.000315"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:36.684758" elapsed="0.112605"/>
</iter>
<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-10-06T01:23:36.799825" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:36.799739" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.799721" elapsed="0.000166"/>
</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-10-06T01:23:36.801029" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:36.800907" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.800890" elapsed="0.000205"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:36.801480" level="INFO">${karaf_connection_index} = 12</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-10-06T01:23:36.801239" elapsed="0.000266"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:36.801853" 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-10-06T01:23:36.801665" elapsed="0.000212"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:36.840136" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:36.802460" elapsed="0.037879"/>
</kw>
<msg time="2026-10-06T01:23:36.840500" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:36.840542" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:36.802031" elapsed="0.038545"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:36.921222" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "M "o "d "i "f "i "e "d "[C "P "o "r "t "[C "A "f "[78Ct "[A[78Ce
 "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:36.841196" elapsed="0.080219"/>
</kw>
<msg time="2026-10-06T01:23:36.921574" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:36.921615" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:36.840777" elapsed="0.080872"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:36.921945" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:36.921741" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.921722" elapsed="0.000317"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:36.922572" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "M "o "d "i "f "i "e "d "[C "P "o "r "t "[C "A "f "[78Ct "[A[78Ce
 "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:36.922222" elapsed="0.000427"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:36.922929" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:36.922733" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.922715" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:36.923052" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:36.925471" elapsed="0.000509"/>
</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-10-06T01:23:36.927183" elapsed="0.000460"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:36.928904" elapsed="0.000459"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:36.923832" elapsed="0.005600"/>
</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-10-06T01:23:36.923315" elapsed="0.006236"/>
</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="PASS" start="2026-10-06T01:23:36.800616" elapsed="0.129012"/>
</kw>
<msg time="2026-10-06T01:23:36.929945" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:36.929986" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:36.800033" elapsed="0.129988"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:36.930176" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:23:36.930091" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.930073" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:36.930578" elapsed="0.000023"/>
</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-10-06T01:23:36.930927" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:36.930992" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:23:36.799434" elapsed="0.131643"/>
</kw>
<msg time="2026-10-06T01:23:36.931161" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:36.931200" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:36.797606" elapsed="0.133628"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:36.931530" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:36.931301" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.931285" elapsed="0.000315"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:36.797470" elapsed="0.134151"/>
</iter>
<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-10-06T01:23:36.934046" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:36.933954" elapsed="0.000134"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.933937" elapsed="0.000171"/>
</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-10-06T01:23:36.935219" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:36.935130" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:36.935113" elapsed="0.000169"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:36.935664" level="INFO">${karaf_connection_index} = 14</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-10-06T01:23:36.935440" elapsed="0.000266"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:36.936042" 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-10-06T01:23:36.935871" elapsed="0.000195"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:36.971706" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:36.936640" elapsed="0.035270"/>
</kw>
<msg time="2026-10-06T01:23:36.972066" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:36.972107" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:36.936217" elapsed="0.035924"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:37.040439" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "M "o "d "i "f "i "e "d "[C "P "o "r "t "[C "A "f "[78Ct "[A[78Ce
 "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:36.972753" elapsed="0.067865"/>
</kw>
<msg time="2026-10-06T01:23:37.040798" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:37.040839" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:36.972303" elapsed="0.068571"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:37.041146" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:37.040944" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:37.040926" elapsed="0.000313"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:37.041798" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "M "o "d "i "f "i "e "d "[C "P "o "r "t "[C "A "f "[78Ct "[A[78Ce
 "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:37.041434" elapsed="0.000442"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:37.042131" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:37.041936" elapsed="0.000263"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:37.041920" elapsed="0.000302"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:37.042251" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:37.044773" elapsed="0.000475"/>
</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-10-06T01:23:37.046492" elapsed="0.000488"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:37.048171" elapsed="0.000611"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:37.043078" elapsed="0.005775"/>
</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-10-06T01:23:37.042568" elapsed="0.006403"/>
</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="PASS" start="2026-10-06T01:23:36.934867" elapsed="0.114183"/>
</kw>
<msg time="2026-10-06T01:23:37.049132" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:37.049171" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:36.934253" elapsed="0.114953"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:37.049386" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:23:37.049277" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:37.049259" elapsed="0.000207"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:37.049809" elapsed="0.000025"/>
</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-10-06T01:23:37.050110" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:37.050174" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:36.933636" elapsed="0.116623"/>
</kw>
<msg time="2026-10-06T01:23:37.050355" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:37.050395" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:36.931928" elapsed="0.118502"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:37.050868" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:37.050497" elapsed="0.000423"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:37.050481" elapsed="0.000461"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:36.931792" elapsed="0.119172"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:36.684544" elapsed="0.366445"/>
</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-10-06T01:23:36.681585" elapsed="0.369453"/>
</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-10-06T01:23:36.678626" elapsed="0.372463"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:36.678064" elapsed="0.373065"/>
</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-10-06T01:23:36.676639" elapsed="0.374536"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:23:37.053272" level="INFO">${port_dictionary} = {'br01': '6', 'vx2': '3', '10.0.0.19': '1'}</msg>
<var>${port_dictionary}</var>
<arg>br01=6</arg>
<arg>vx2=3</arg>
<arg>10.0.0.19=1</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:23:37.052953" elapsed="0.000345"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:23:37.057952" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:23:37.056641" elapsed="0.001346">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:23:38.067155" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:23:38.064237" elapsed="0.002997">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:23:39.076594" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:23:39.073638" elapsed="0.003063">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:23:40.089265" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:23:40.086326" elapsed="0.003021">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:23:41.098835" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:23:41.095778" elapsed="0.003142">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:23:42.108348" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:23:42.105335" elapsed="0.003113">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<msg time="2026-10-06T01:23:42.108647" level="FAIL">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</msg>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-10-06T01:23:37.053510" elapsed="5.055442">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:23:37.052575" elapsed="5.056658">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify modified port exists in all instances.</doc>
<status status="FAIL" start="2026-10-06T01:23:36.675948" elapsed="5.433591">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s1-s1-t36" name="Delete Port In New Owner After Recover" line="174">
<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-10-06T01:23:42.112879" elapsed="0.000511"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:23:42.112266" elapsed="0.001262"/>
</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-10-06T01:23:42.115725" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:42.115470" elapsed="0.000357"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.115424" elapsed="0.000453"/>
</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-10-06T01:23:42.120221" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:42.120033" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.119995" elapsed="0.000366"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:42.122518" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:42.121715" elapsed="0.000861"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:42.123602" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:42.122939" elapsed="0.000718"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:42.123776" elapsed="0.000064"/>
</return>
<msg time="2026-10-06T01:23:42.124075" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:42.120874" elapsed="0.003260"/>
</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-10-06T01:23:42.130011" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:42.129819" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.129779" elapsed="0.000375"/>
</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-10-06T01:23:42.132768" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:42.132521" elapsed="0.000427"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.132482" elapsed="0.000521"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:42.133933" 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-10-06T01:23:42.133357" elapsed="0.000633"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:42.134850" 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-10-06T01:23:42.134386" elapsed="0.000520"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:42.172620" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:42.136330" elapsed="0.036577"/>
</kw>
<msg time="2026-10-06T01:23:42.173133" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:42.173191" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.135248" elapsed="0.037992"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:42.246567" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "N "e "w "[C "O "w "n "e "[78Cr "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:42.174115" elapsed="0.072662"/>
</kw>
<msg time="2026-10-06T01:23:42.246943" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:42.246985" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.173488" elapsed="0.073532"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:42.247341" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:42.247109" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.247081" elapsed="0.000374"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:42.248017" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "N "e "w "[C "O "w "n "e "[78Cr "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:42.247643" elapsed="0.000456"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:42.248357" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:42.248161" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.248144" elapsed="0.000322"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:42.248499" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:42.251097" elapsed="0.000498"/>
</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-10-06T01:23:42.252853" elapsed="0.000471"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:42.254514" elapsed="0.000547"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:42.249346" elapsed="0.005782"/>
</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-10-06T01:23:42.248827" elapsed="0.006417"/>
</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="PASS" start="2026-10-06T01:23:42.131925" elapsed="0.123397"/>
</kw>
<msg time="2026-10-06T01:23:42.255417" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:42.255458" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.130500" elapsed="0.124993"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:42.255650" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-10-06T01:23:42.255564" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.255547" elapsed="0.000233"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:23:42.256112" elapsed="0.000024"/>
</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-10-06T01:23:42.256482" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:42.256548" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:42.129114" elapsed="0.127520"/>
</kw>
<msg time="2026-10-06T01:23:42.256808" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:42.256849" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.124947" elapsed="0.131936"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:42.257173" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:42.256954" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.256938" elapsed="0.000305"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:42.124608" elapsed="0.132657"/>
</iter>
<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-10-06T01:23:42.259844" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:42.259759" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.259742" elapsed="0.000165"/>
</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-10-06T01:23:42.261007" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:42.260923" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.260906" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:42.261456" level="INFO">${karaf_connection_index} = 12</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-10-06T01:23:42.261211" elapsed="0.000269"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:42.261830" 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-10-06T01:23:42.261640" elapsed="0.000214"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:42.297025" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:42.262433" elapsed="0.034765"/>
</kw>
<msg time="2026-10-06T01:23:42.297355" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:42.297408" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.262005" elapsed="0.035439"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:42.366118" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "N "e "w "[C "O "w "n "e "[78Cr "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:42.298071" elapsed="0.068401"/>
</kw>
<msg time="2026-10-06T01:23:42.366765" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:42.366811" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.297605" elapsed="0.069243"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:42.367350" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:42.366985" elapsed="0.000458"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.366939" elapsed="0.000538"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:42.368183" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "N "e "w "[C "O "w "n "e "[78Cr "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:42.367688" elapsed="0.000583"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:42.368550" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:42.368334" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.368316" elapsed="0.000327"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:42.368696" elapsed="0.000045"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:42.371514" elapsed="0.000509"/>
</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-10-06T01:23:42.373276" elapsed="0.000535"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:42.375011" elapsed="0.000318"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:42.369750" elapsed="0.005661"/>
</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-10-06T01:23:42.369146" elapsed="0.006389"/>
</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="PASS" start="2026-10-06T01:23:42.260646" elapsed="0.114970"/>
</kw>
<msg time="2026-10-06T01:23:42.375730" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:42.375772" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.260056" elapsed="0.115752"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:42.375969" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:23:42.375882" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.375864" elapsed="0.000184"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:42.376411" elapsed="0.000025"/>
</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-10-06T01:23:42.377054" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:42.377121" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:42.259447" elapsed="0.117764"/>
</kw>
<msg time="2026-10-06T01:23:42.377301" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:42.377342" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.257533" elapsed="0.119844"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:42.377729" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:42.377482" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.377461" elapsed="0.000341"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:42.257383" elapsed="0.120441"/>
</iter>
<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-10-06T01:23:42.380627" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:42.380540" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.380521" elapsed="0.000185"/>
</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-10-06T01:23:42.381818" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:42.381731" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.381713" elapsed="0.000167"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:42.382261" level="INFO">${karaf_connection_index} = 14</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-10-06T01:23:42.382025" elapsed="0.000261"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:42.382646" 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-10-06T01:23:42.382466" elapsed="0.000205"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:42.418637" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:42.383256" elapsed="0.035577"/>
</kw>
<msg time="2026-10-06T01:23:42.419007" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:42.419048" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.382843" elapsed="0.036240"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:42.504438" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "N "e "w "[C "O "w "n "e "[78Cr "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:42.419694" elapsed="0.084958"/>
</kw>
<msg time="2026-10-06T01:23:42.504835" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:42.504876" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.419246" elapsed="0.085666"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:42.505203" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:42.504981" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.504964" elapsed="0.000356"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:42.505871" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "N "e "w "[C "O "w "n "e "[78Cr "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:42.505514" elapsed="0.000439"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:42.506214" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:42.506015" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.505998" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:42.506337" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:42.508815" elapsed="0.000471"/>
</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-10-06T01:23:42.510526" elapsed="0.000478"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:42.512368" elapsed="0.000335"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:42.507132" elapsed="0.005644"/>
</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-10-06T01:23:42.506616" elapsed="0.006276"/>
</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="PASS" start="2026-10-06T01:23:42.381448" elapsed="0.131520"/>
</kw>
<msg time="2026-10-06T01:23:42.513066" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:42.513110" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.380856" elapsed="0.132290"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:42.513300" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:23:42.513216" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.513199" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:42.513789" elapsed="0.000026"/>
</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-10-06T01:23:42.514098" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:42.514164" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:42.380125" elapsed="0.134125"/>
</kw>
<msg time="2026-10-06T01:23:42.514333" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:42.514373" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.378095" elapsed="0.136326"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:42.514729" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:42.514491" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.514474" elapsed="0.000329"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:42.377954" elapsed="0.136870"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:42.124262" elapsed="0.390590"/>
</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-10-06T01:23:42.119330" elapsed="0.395580"/>
</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-10-06T01:23:42.114857" elapsed="0.400143"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.113892" elapsed="0.401155"/>
</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-10-06T01:23:42.111452" elapsed="0.403648"/>
</kw>
<kw name="Delete Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:23:42.519155" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<doc>Delete port vx2 from bridge br01 in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:23:42.517982" elapsed="0.001210">Variable '${new_owner}' not found.</status>
</kw>
<doc>Delete port in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:23:42.110218" elapsed="0.409121">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t37" name="Delete Bridge In New Owner And Verify After Recover" line="178">
<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-10-06T01:23:42.520896" elapsed="0.000200"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:23:42.520633" elapsed="0.000516"/>
</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-10-06T01:23:42.522052" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:42.521968" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.521951" elapsed="0.000164"/>
</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-10-06T01:23:42.523991" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:42.523909" elapsed="0.000123"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.523892" elapsed="0.000160"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:42.524970" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:42.524623" elapsed="0.000374"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:42.525441" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:42.525154" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:42.525506" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:23:42.525632" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:42.524256" elapsed="0.001398"/>
</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-10-06T01:23:42.528199" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:42.528114" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.528096" elapsed="0.000166"/>
</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-10-06T01:23:42.529352" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:42.529268" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.529251" elapsed="0.000178"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:42.529820" 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-10-06T01:23:42.529572" elapsed="0.000273"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:42.530176" 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-10-06T01:23:42.530008" elapsed="0.000192"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:42.566526" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:42.530795" elapsed="0.035930"/>
</kw>
<msg time="2026-10-06T01:23:42.566884" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:42.566926" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.530352" elapsed="0.036610"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:42.667373" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "N "e "w "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:42.567563" elapsed="0.100008"/>
</kw>
<msg time="2026-10-06T01:23:42.667751" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:42.667827" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.567124" elapsed="0.100741"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:42.668141" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:42.667936" elapsed="0.000277"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.667918" elapsed="0.000318"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:42.668784" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "N "e "w "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:42.668427" elapsed="0.000443"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:42.669128" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:42.668931" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.668914" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:42.669253" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:42.671769" elapsed="0.000477"/>
</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-10-06T01:23:42.673494" elapsed="0.000471"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:42.675158" elapsed="0.000325"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:42.670052" elapsed="0.005497"/>
</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-10-06T01:23:42.669533" elapsed="0.006135"/>
</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="PASS" start="2026-10-06T01:23:42.529010" elapsed="0.147000"/>
</kw>
<msg time="2026-10-06T01:23:42.676093" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:42.676132" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.528420" elapsed="0.147747"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:42.676323" elapsed="0.000023"/>
</return>
<status status="PASS" start="2026-10-06T01:23:42.676237" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.676220" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:23:42.676741" elapsed="0.000024"/>
</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-10-06T01:23:42.677043" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:42.677106" 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="PASS" start="2026-10-06T01:23:42.527824" elapsed="0.149368"/>
</kw>
<msg time="2026-10-06T01:23:42.677275" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:42.677314" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.526008" elapsed="0.151345"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:42.677652" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:42.677433" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.677416" elapsed="0.000350"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:42.525870" elapsed="0.151918"/>
</iter>
<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-10-06T01:23:42.680330" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:42.680245" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.680228" elapsed="0.000166"/>
</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-10-06T01:23:42.681533" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:42.681416" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.681388" elapsed="0.000216"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:42.682005" level="INFO">${karaf_connection_index} = 12</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-10-06T01:23:42.681769" elapsed="0.000261"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:42.682358" 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-10-06T01:23:42.682189" elapsed="0.000194"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:42.717085" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:42.682984" elapsed="0.034286"/>
</kw>
<msg time="2026-10-06T01:23:42.717439" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:42.717482" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.682549" elapsed="0.034969"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:42.800734" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "N "e "w "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:42.718120" elapsed="0.082793"/>
</kw>
<msg time="2026-10-06T01:23:42.801068" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:42.801109" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.717700" elapsed="0.083444"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:42.801433" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:42.801214" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.801196" elapsed="0.000332"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:42.802066" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "N "e "w "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:42.801730" elapsed="0.000420"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:42.802424" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:42.802212" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.802196" elapsed="0.000322"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:42.802547" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:42.805025" elapsed="0.000487"/>
</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-10-06T01:23:42.806769" elapsed="0.000447"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:42.808434" elapsed="0.000607"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:42.803320" elapsed="0.005790"/>
</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-10-06T01:23:42.802829" elapsed="0.006413"/>
</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="PASS" start="2026-10-06T01:23:42.681147" elapsed="0.128172"/>
</kw>
<msg time="2026-10-06T01:23:42.809401" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:42.809453" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.680553" elapsed="0.128936"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:42.809644" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:42.809559" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.809542" elapsed="0.000197"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:42.810051" elapsed="0.000023"/>
</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-10-06T01:23:42.810385" elapsed="0.000037"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:42.810465" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:23:42.679953" elapsed="0.130599"/>
</kw>
<msg time="2026-10-06T01:23:42.810635" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:42.810759" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.678034" elapsed="0.132767"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:42.811090" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:42.810871" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.810854" elapsed="0.000308"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:42.677898" elapsed="0.133285"/>
</iter>
<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-10-06T01:23:42.813694" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:42.813589" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.813571" elapsed="0.000190"/>
</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-10-06T01:23:42.814869" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:42.814785" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.814768" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:42.815298" level="INFO">${karaf_connection_index} = 14</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-10-06T01:23:42.815074" elapsed="0.000249"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:42.815666" 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-10-06T01:23:42.815493" elapsed="0.000213"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:42.851180" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:42.816270" elapsed="0.035107"/>
</kw>
<msg time="2026-10-06T01:23:42.851545" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:42.851587" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.815861" elapsed="0.035761"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:42.934722" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "N "e "w "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:42.852224" elapsed="0.082680"/>
</kw>
<msg time="2026-10-06T01:23:42.935060" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:42.935101" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.851806" elapsed="0.083331"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:42.935424" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:42.935206" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.935189" elapsed="0.000329"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:42.936057" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "N "e "w "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:42.935721" elapsed="0.000426"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:42.936417" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:42.936208" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.936192" elapsed="0.000321"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:42.936543" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:42.939023" elapsed="0.000479"/>
</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-10-06T01:23:42.940721" elapsed="0.000443"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:42.942336" elapsed="0.000321"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:42.937348" elapsed="0.005397"/>
</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-10-06T01:23:42.936857" elapsed="0.006005"/>
</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="PASS" start="2026-10-06T01:23:42.814502" elapsed="0.128437"/>
</kw>
<msg time="2026-10-06T01:23:42.943021" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:42.943060" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.813909" elapsed="0.129188"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:42.943249" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:42.943165" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.943148" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:42.943653" elapsed="0.000311"/>
</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-10-06T01:23:42.944253" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:42.944318" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:42.813285" elapsed="0.131128"/>
</kw>
<msg time="2026-10-06T01:23:42.944500" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:42.944539" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.811438" elapsed="0.133136"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:42.944875" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:42.944643" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.944627" elapsed="0.000319"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:42.811291" elapsed="0.133676"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:42.525725" elapsed="0.419267"/>
</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-10-06T01:23:42.523605" elapsed="0.421436"/>
</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-10-06T01:23:42.521712" elapsed="0.423381"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.521293" elapsed="0.423840"/>
</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-10-06T01:23:42.520279" elapsed="0.424901"/>
</kw>
<kw name="Delete Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:23:42.949116" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<doc>Delete bridge br01 in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:23:42.947956" elapsed="0.001194">Variable '${new_owner}' not found.</status>
</kw>
<doc>Delete bridge in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:23:42.519718" elapsed="0.429554">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t38" name="Create Bridge In Old Owner and Verify After Recover" line="182">
<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-10-06T01:23:42.950707" elapsed="0.000199"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:23:42.950448" elapsed="0.000507"/>
</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-10-06T01:23:42.951854" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:42.951760" elapsed="0.000136"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.951743" elapsed="0.000173"/>
</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-10-06T01:23:42.953827" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:42.953742" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.953725" elapsed="0.000164"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:42.954795" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:42.954455" elapsed="0.000366"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:42.955245" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:42.954970" elapsed="0.000299"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:42.955310" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:23:42.955449" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:42.954089" elapsed="0.001383"/>
</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-10-06T01:23:42.957990" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:42.957905" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.957888" elapsed="0.000164"/>
</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-10-06T01:23:42.959157" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:42.959073" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:42.959056" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:42.959602" 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-10-06T01:23:42.959361" elapsed="0.000270"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:42.959981" 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-10-06T01:23:42.959811" elapsed="0.000195"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:42.997120" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:42.960583" elapsed="0.036707"/>
</kw>
<msg time="2026-10-06T01:23:42.997480" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:42.997523" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.960159" elapsed="0.037399"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:43.083737" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "d "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:42.998161" elapsed="0.085770"/>
</kw>
<msg time="2026-10-06T01:23:43.084096" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:43.084139" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.997744" elapsed="0.086432"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:43.084474" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:43.084250" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.084231" elapsed="0.000339"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:43.085124" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "d "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:43.084773" elapsed="0.000439"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:43.085492" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:43.085276" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.085259" elapsed="0.000327"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:43.085616" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:43.088143" elapsed="0.000491"/>
</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-10-06T01:23:43.089874" elapsed="0.000450"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:43.091507" elapsed="0.000539"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:43.086397" elapsed="0.005717"/>
</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-10-06T01:23:43.085900" elapsed="0.006332"/>
</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="PASS" start="2026-10-06T01:23:42.958816" elapsed="0.133495"/>
</kw>
<msg time="2026-10-06T01:23:43.092395" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:43.092450" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.958200" elapsed="0.134287"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:43.092646" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:43.092558" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.092541" elapsed="0.000200"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:23:43.093061" elapsed="0.000023"/>
</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-10-06T01:23:43.093366" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:43.093444" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:23:42.957601" elapsed="0.135930"/>
</kw>
<msg time="2026-10-06T01:23:43.093615" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:43.093656" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.955810" elapsed="0.137970"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:43.094070" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:43.093853" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.093837" elapsed="0.000306"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:42.955657" elapsed="0.138508"/>
</iter>
<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-10-06T01:23:43.096723" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:43.096610" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.096593" 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-10-06T01:23:43.097911" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:43.097825" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.097808" elapsed="0.000168"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:43.098344" level="INFO">${karaf_connection_index} = 12</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-10-06T01:23:43.098118" elapsed="0.000251"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:43.098734" 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-10-06T01:23:43.098544" elapsed="0.000215"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:43.136254" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:43.099326" elapsed="0.037137"/>
</kw>
<msg time="2026-10-06T01:23:43.136621" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:43.136663" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.098914" elapsed="0.037807"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:43.233598" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "d "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:43.137310" elapsed="0.096525"/>
</kw>
<msg time="2026-10-06T01:23:43.233992" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:43.234036" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.136888" elapsed="0.097184"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:43.234352" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:43.234143" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.234125" elapsed="0.000339"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:43.235011" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "d "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:43.234641" elapsed="0.000457"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:43.235358" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:43.235160" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.235144" elapsed="0.000320"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:43.235495" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:43.237997" elapsed="0.000489"/>
</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-10-06T01:23:43.239813" elapsed="0.000460"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:43.241648" elapsed="0.000329"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:43.236286" elapsed="0.005759"/>
</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-10-06T01:23:43.235786" elapsed="0.006379"/>
</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="PASS" start="2026-10-06T01:23:43.097539" elapsed="0.144703"/>
</kw>
<msg time="2026-10-06T01:23:43.242327" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:43.242367" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.096936" elapsed="0.145468"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:43.242576" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:43.242490" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.242472" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:43.243051" elapsed="0.000027"/>
</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-10-06T01:23:43.243352" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:43.243431" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:23:43.096301" elapsed="0.147217"/>
</kw>
<msg time="2026-10-06T01:23:43.243603" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:43.243644" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.094425" elapsed="0.149271"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:43.243990" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:43.243768" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.243751" elapsed="0.000312"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:43.094274" elapsed="0.149810"/>
</iter>
<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-10-06T01:23:43.246658" elapsed="0.000028"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:43.246572" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.246555" elapsed="0.000212"/>
</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-10-06T01:23:43.247884" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:43.247799" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.247782" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:43.248316" level="INFO">${karaf_connection_index} = 14</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-10-06T01:23:43.248088" elapsed="0.000253"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:43.248710" 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-10-06T01:23:43.248519" elapsed="0.000217"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:43.283326" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:43.249312" elapsed="0.034202"/>
</kw>
<msg time="2026-10-06T01:23:43.283671" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:43.283735" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.248892" elapsed="0.034880"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:43.366190" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "d "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:43.284361" elapsed="0.082012"/>
</kw>
<msg time="2026-10-06T01:23:43.366544" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:43.366586" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.283937" elapsed="0.082685"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:43.366919" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:43.366716" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.366697" elapsed="0.000317"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:43.367545" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "d "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:43.367190" elapsed="0.000440"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:43.367921" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:43.367724" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.367707" elapsed="0.000307"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:43.368045" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:43.370493" elapsed="0.000489"/>
</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-10-06T01:23:43.372193" elapsed="0.000463"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:43.374036" elapsed="0.000307"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:43.368842" elapsed="0.005583"/>
</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-10-06T01:23:43.368316" elapsed="0.006228"/>
</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="PASS" start="2026-10-06T01:23:43.247517" elapsed="0.127102"/>
</kw>
<msg time="2026-10-06T01:23:43.374718" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:43.374758" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.246919" elapsed="0.127875"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:43.374947" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:43.374863" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.374846" elapsed="0.000209"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:43.375373" elapsed="0.000024"/>
</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-10-06T01:23:43.375733" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:43.375801" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:43.246264" elapsed="0.129622"/>
</kw>
<msg time="2026-10-06T01:23:43.375970" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:43.376011" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.244330" elapsed="0.131716"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:43.376333" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:43.376114" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.376098" elapsed="0.000307"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:43.244195" elapsed="0.132246"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:42.955519" elapsed="0.420949"/>
</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-10-06T01:23:42.953390" elapsed="0.423130"/>
</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-10-06T01:23:42.951491" elapsed="0.425085"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:42.951098" elapsed="0.425520"/>
</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-10-06T01:23:42.950099" elapsed="0.426567"/>
</kw>
<kw name="Create Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:23:43.382004" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Create bridge br01 in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:23:43.380763" elapsed="0.001276">Variable '${original_owner}' not found.</status>
</kw>
<doc>Create Bridge in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:23:42.949562" elapsed="0.432611">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t39" name="Create Port In Old Owner and Verify After Recover" line="186">
<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-10-06T01:23:43.383768" elapsed="0.000202"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:23:43.383365" elapsed="0.000655"/>
</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-10-06T01:23:43.384921" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:43.384835" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.384817" elapsed="0.000166"/>
</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-10-06T01:23:43.386913" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:43.386831" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.386814" elapsed="0.000161"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:43.387882" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:43.387541" elapsed="0.000367"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:43.388428" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:43.388055" elapsed="0.000403"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:43.388500" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:23:43.388626" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:43.387174" elapsed="0.001475"/>
</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-10-06T01:23:43.391155" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:43.391071" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.391053" elapsed="0.000164"/>
</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-10-06T01:23:43.392338" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:43.392254" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.392237" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:43.392812" 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-10-06T01:23:43.392559" elapsed="0.000277"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:43.393168" 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-10-06T01:23:43.392996" elapsed="0.000197"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:43.428423" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:43.393801" elapsed="0.034796"/>
</kw>
<msg time="2026-10-06T01:23:43.428781" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:43.428823" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.393347" elapsed="0.035510"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:43.508777" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:43.429455" elapsed="0.079500"/>
</kw>
<msg time="2026-10-06T01:23:43.509110" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:43.509151" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.429022" elapsed="0.080163"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:43.509470" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:43.509255" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.509237" elapsed="0.000327"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:43.510100" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:43.509764" elapsed="0.000419"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:43.510449" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:43.510244" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.510227" elapsed="0.000324"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:43.510581" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:43.513079" elapsed="0.000486"/>
</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-10-06T01:23:43.514824" elapsed="0.000452"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:43.516480" elapsed="0.000540"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:43.511383" elapsed="0.005703"/>
</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-10-06T01:23:43.510865" elapsed="0.006339"/>
</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="PASS" start="2026-10-06T01:23:43.391964" elapsed="0.125317"/>
</kw>
<msg time="2026-10-06T01:23:43.517364" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:43.517403" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.391362" elapsed="0.126089"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:43.517604" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:43.517521" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.517504" elapsed="0.000193"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:23:43.518010" elapsed="0.000024"/>
</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-10-06T01:23:43.518346" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:43.518424" 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="PASS" start="2026-10-06T01:23:43.390781" elapsed="0.127734"/>
</kw>
<msg time="2026-10-06T01:23:43.518598" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:43.518636" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.388994" elapsed="0.129677"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:43.519043" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:43.518828" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.518812" elapsed="0.000302"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:43.388857" elapsed="0.130279"/>
</iter>
<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-10-06T01:23:43.521656" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:43.521572" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.521554" elapsed="0.000181"/>
</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-10-06T01:23:43.522839" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:43.522755" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.522738" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:43.523266" level="INFO">${karaf_connection_index} = 12</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-10-06T01:23:43.523042" elapsed="0.000248"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:43.523637" 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-10-06T01:23:43.523461" elapsed="0.000200"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:43.559598" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:43.524247" elapsed="0.035541"/>
</kw>
<msg time="2026-10-06T01:23:43.559961" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:43.560002" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.523834" elapsed="0.036203"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:43.644648" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:43.560626" elapsed="0.084227"/>
</kw>
<msg time="2026-10-06T01:23:43.645016" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:43.645060" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.560199" elapsed="0.084896"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:43.645375" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:43.645167" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.645148" elapsed="0.000337"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:43.646031" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:43.645665" elapsed="0.000455"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:43.646380" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:43.646183" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.646166" elapsed="0.000355"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:43.646553" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:43.649048" elapsed="0.000494"/>
</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-10-06T01:23:43.650788" elapsed="0.000454"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:43.652441" elapsed="0.000555"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:43.647347" elapsed="0.005716"/>
</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-10-06T01:23:43.646846" elapsed="0.006333"/>
</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="PASS" start="2026-10-06T01:23:43.522471" elapsed="0.130786"/>
</kw>
<msg time="2026-10-06T01:23:43.653339" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:43.653379" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.521883" elapsed="0.131544"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:43.653586" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:43.653500" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.653482" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:43.653998" elapsed="0.000024"/>
</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-10-06T01:23:43.654304" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:43.654368" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:23:43.521240" elapsed="0.133229"/>
</kw>
<msg time="2026-10-06T01:23:43.654553" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:43.654593" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.519382" elapsed="0.135245"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:43.655000" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:43.654780" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.654762" elapsed="0.000310"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:43.519245" elapsed="0.135848"/>
</iter>
<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-10-06T01:23:43.657601" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:43.657515" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.657498" elapsed="0.000167"/>
</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-10-06T01:23:43.658794" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:43.658707" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.658668" elapsed="0.000190"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:43.659223" level="INFO">${karaf_connection_index} = 14</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-10-06T01:23:43.659000" elapsed="0.000248"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:43.659591" 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-10-06T01:23:43.659406" elapsed="0.000209"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:43.693937" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:43.660198" elapsed="0.033912"/>
</kw>
<msg time="2026-10-06T01:23:43.694267" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:43.694308" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.659787" elapsed="0.034555"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:43.788876" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:43.695009" elapsed="0.094049"/>
</kw>
<msg time="2026-10-06T01:23:43.789215" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:43.789257" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.694560" elapsed="0.094732"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:43.789580" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:43.789362" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.789344" elapsed="0.000353"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:43.790219" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:43.789881" elapsed="0.000421"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:43.790572" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:43.790363" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.790347" elapsed="0.000316"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:43.790711" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:43.793192" elapsed="0.000557"/>
</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-10-06T01:23:43.795053" elapsed="0.000461"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:43.796733" elapsed="0.000360"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:43.791478" elapsed="0.005683"/>
</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-10-06T01:23:43.790975" elapsed="0.006302"/>
</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="PASS" start="2026-10-06T01:23:43.658425" elapsed="0.138929"/>
</kw>
<msg time="2026-10-06T01:23:43.797446" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:43.797487" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.657835" elapsed="0.139686"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:43.797926" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-10-06T01:23:43.797590" elapsed="0.000395"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.797573" elapsed="0.000435"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:43.798372" elapsed="0.000025"/>
</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-10-06T01:23:43.798705" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:43.798772" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:23:43.657206" elapsed="0.141653"/>
</kw>
<msg time="2026-10-06T01:23:43.798943" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:43.798983" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.655341" elapsed="0.143676"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:43.799303" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:43.799085" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.799069" elapsed="0.000339"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:43.655204" elapsed="0.144240"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:43.388715" elapsed="0.410757"/>
</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-10-06T01:23:43.386514" elapsed="0.413011"/>
</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-10-06T01:23:43.384563" elapsed="0.415014"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.384164" elapsed="0.415453"/>
</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-10-06T01:23:43.383029" elapsed="0.416636"/>
</kw>
<kw name="Create Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:23:43.803752" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Add Port vx2 to bridge br01 in controller ${controller_index} and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:23:43.802501" elapsed="0.001285">Variable '${original_owner}' not found.</status>
</kw>
<doc>Create Port in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:23:43.382494" elapsed="0.421420">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t40" name="Modify the destination IP of Port In Old Owner After Recover" line="190">
<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-10-06T01:23:43.805328" elapsed="0.000215"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:23:43.805083" elapsed="0.000511"/>
</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-10-06T01:23:43.806498" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:43.806395" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.806378" elapsed="0.000183"/>
</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-10-06T01:23:43.808446" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:43.808350" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.808333" elapsed="0.000177"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:43.809403" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:43.809080" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:43.809886" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:43.809594" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:43.809951" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:23:43.810077" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:43.808726" elapsed="0.001374"/>
</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-10-06T01:23:43.812631" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:43.812546" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.812528" elapsed="0.000197"/>
</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-10-06T01:23:43.813929" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:43.813845" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.813828" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:43.814357" 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-10-06T01:23:43.814134" elapsed="0.000247"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:43.814744" 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-10-06T01:23:43.814555" elapsed="0.000213"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:43.850056" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:43.815329" elapsed="0.034903"/>
</kw>
<msg time="2026-10-06T01:23:43.850390" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:43.850445" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.814922" elapsed="0.035559"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:43.953212" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:43.851137" elapsed="0.102262"/>
</kw>
<msg time="2026-10-06T01:23:43.953573" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:43.953614" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.850708" elapsed="0.102942"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:43.953947" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:43.953742" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.953724" elapsed="0.000318"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:43.954576" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:43.954228" elapsed="0.000436"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:43.954943" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:43.954744" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.954727" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:43.955065" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:43.957501" elapsed="0.000493"/>
</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-10-06T01:23:43.959233" elapsed="0.000488"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:43.961095" elapsed="0.000303"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:43.955857" elapsed="0.005620"/>
</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-10-06T01:23:43.955327" elapsed="0.006266"/>
</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="PASS" start="2026-10-06T01:23:43.813563" elapsed="0.148107"/>
</kw>
<msg time="2026-10-06T01:23:43.961771" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:43.961810" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.812888" elapsed="0.148957"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:43.961999" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:43.961915" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.961897" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:23:43.962390" elapsed="0.000024"/>
</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-10-06T01:23:43.962794" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:43.962861" 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="PASS" start="2026-10-06T01:23:43.812242" elapsed="0.150706"/>
</kw>
<msg time="2026-10-06T01:23:43.963033" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:43.963073" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.810440" elapsed="0.152670"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:43.963392" elapsed="0.000018"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:43.963178" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.963162" elapsed="0.000347"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:43.810287" elapsed="0.153244"/>
</iter>
<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-10-06T01:23:43.966071" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:43.965986" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.965968" elapsed="0.000166"/>
</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-10-06T01:23:43.967240" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:43.967155" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:43.967136" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:43.967697" level="INFO">${karaf_connection_index} = 12</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-10-06T01:23:43.967457" elapsed="0.000266"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:43.968054" 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-10-06T01:23:43.967884" elapsed="0.000194"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:44.008731" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:43.968657" elapsed="0.040263"/>
</kw>
<msg time="2026-10-06T01:23:44.009077" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:44.009119" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.968231" elapsed="0.040923"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:44.099557" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:44.009781" elapsed="0.089984"/>
</kw>
<msg time="2026-10-06T01:23:44.099923" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:44.099963" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:44.009321" elapsed="0.090677"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:44.100271" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:44.100068" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.100050" elapsed="0.000315"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:44.100921" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:44.100565" elapsed="0.000445"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:44.101283" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:44.101072" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.101055" elapsed="0.000322"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:44.101407" elapsed="0.000039"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:44.103930" elapsed="0.000474"/>
</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-10-06T01:23:44.105665" elapsed="0.000479"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:44.107514" elapsed="0.000324"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:44.102228" elapsed="0.005677"/>
</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-10-06T01:23:44.101711" elapsed="0.006311"/>
</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="PASS" start="2026-10-06T01:23:43.966893" elapsed="0.141206"/>
</kw>
<msg time="2026-10-06T01:23:44.108180" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:44.108252" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.966283" elapsed="0.142007"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:44.108462" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:44.108360" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.108342" elapsed="0.000198"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:44.108930" elapsed="0.000024"/>
</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-10-06T01:23:44.109230" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:44.109296" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:43.965690" elapsed="0.143691"/>
</kw>
<msg time="2026-10-06T01:23:44.109483" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:44.109523" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.963797" elapsed="0.145761"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:44.109859" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:44.109626" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.109610" elapsed="0.000322"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:43.963642" elapsed="0.146311"/>
</iter>
<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-10-06T01:23:44.112512" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:44.112413" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.112395" elapsed="0.000181"/>
</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-10-06T01:23:44.113668" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:44.113586" elapsed="0.000147"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.113569" elapsed="0.000185"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:44.114123" level="INFO">${karaf_connection_index} = 14</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-10-06T01:23:44.113896" elapsed="0.000251"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:44.114489" 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-10-06T01:23:44.114305" elapsed="0.000209"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:44.148362" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:44.115091" elapsed="0.033461"/>
</kw>
<msg time="2026-10-06T01:23:44.148729" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:44.148771" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:44.114664" elapsed="0.034142"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:44.239494" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:44.149387" elapsed="0.090319"/>
</kw>
<msg time="2026-10-06T01:23:44.239872" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:44.239915" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:44.148967" elapsed="0.090983"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:44.240232" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:44.240022" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.240003" elapsed="0.000356"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:44.240964" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:44.240589" elapsed="0.000466"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:44.241326" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:44.241124" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.241104" elapsed="0.000315"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:44.241465" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:44.243974" elapsed="0.000495"/>
</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-10-06T01:23:44.245734" elapsed="0.000460"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:44.247607" elapsed="0.000328"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:44.242262" elapsed="0.005741"/>
</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-10-06T01:23:44.241761" elapsed="0.006365"/>
</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="PASS" start="2026-10-06T01:23:44.113314" elapsed="0.134890"/>
</kw>
<msg time="2026-10-06T01:23:44.248288" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:44.248329" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:44.112738" elapsed="0.135627"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:44.248538" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:44.248450" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.248418" elapsed="0.000199"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:44.249008" elapsed="0.000024"/>
</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-10-06T01:23:44.249309" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:44.249375" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:44.112119" elapsed="0.137356"/>
</kw>
<msg time="2026-10-06T01:23:44.249564" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:44.249604" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:44.110198" elapsed="0.139441"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:44.249941" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:44.249725" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.249708" elapsed="0.000305"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:44.110061" elapsed="0.139974"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:43.810147" elapsed="0.439915"/>
</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-10-06T01:23:43.808057" elapsed="0.442057"/>
</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-10-06T01:23:43.806143" elapsed="0.444023"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:43.805754" elapsed="0.444454"/>
</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-10-06T01:23:43.804748" elapsed="0.445508"/>
</kw>
<kw name="Modify the destination IP of Sample Port" owner="ClusterOvsdb">
<msg time="2026-10-06T01:23:44.253224" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Modify the dst ip of port vx2 in bridge br01 in controller ${controller_index}.</doc>
<status status="FAIL" start="2026-10-06T01:23:44.251980" elapsed="0.001278">Variable '${original_owner}' not found.</status>
</kw>
<doc>Modify the dst ip of existing port in Owner.</doc>
<status status="FAIL" start="2026-10-06T01:23:43.804199" elapsed="0.449219">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t41" name="Verify Port Is Modified After Recover" line="194">
<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-10-06T01:23:44.254829" elapsed="0.000203"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:23:44.254559" elapsed="0.000524"/>
</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-10-06T01:23:44.255999" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:44.255912" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.255895" elapsed="0.000169"/>
</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-10-06T01:23:44.257964" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:44.257880" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.257864" elapsed="0.000163"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:44.258941" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:44.258594" elapsed="0.000373"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:44.259391" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:44.259117" elapsed="0.000299"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:44.259469" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:23:44.259596" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:44.258229" elapsed="0.001390"/>
</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-10-06T01:23:44.262149" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:44.262064" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.262047" elapsed="0.000166"/>
</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-10-06T01:23:44.263313" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:44.263230" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.263213" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:44.263790" 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-10-06T01:23:44.263540" elapsed="0.000275"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:44.264150" 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-10-06T01:23:44.263976" elapsed="0.000200"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:44.300029" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:44.264776" elapsed="0.035431"/>
</kw>
<msg time="2026-10-06T01:23:44.300366" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:44.300408" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:44.264329" elapsed="0.036124"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:44.368417" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CA
 "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:44.301071" elapsed="0.067538"/>
</kw>
<msg time="2026-10-06T01:23:44.368791" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:44.368833" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:44.300626" elapsed="0.068242"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:44.369148" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:44.368938" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.368920" elapsed="0.000321"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:44.369787" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CA
 "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:44.369422" elapsed="0.000481"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:44.370166" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:44.369967" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.369950" elapsed="0.000310"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:44.370291" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:44.372787" elapsed="0.000476"/>
</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-10-06T01:23:44.374490" elapsed="0.000473"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:44.376134" elapsed="0.000320"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:44.371096" elapsed="0.005426"/>
</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-10-06T01:23:44.370575" elapsed="0.006065"/>
</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="PASS" start="2026-10-06T01:23:44.262971" elapsed="0.114008"/>
</kw>
<msg time="2026-10-06T01:23:44.377068" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:44.377108" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:44.262360" elapsed="0.114785"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:44.377299" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:23:44.377213" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.377196" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:23:44.377720" elapsed="0.000024"/>
</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-10-06T01:23:44.378019" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:44.378084" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:44.261772" elapsed="0.116396"/>
</kw>
<msg time="2026-10-06T01:23:44.378252" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:44.378292" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:44.259960" elapsed="0.118368"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:44.378624" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:44.378396" elapsed="0.000347"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.378380" elapsed="0.000389"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:44.259823" elapsed="0.118968"/>
</iter>
<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-10-06T01:23:44.381275" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:44.381190" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.381173" elapsed="0.000166"/>
</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-10-06T01:23:44.382445" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:44.382347" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.382330" elapsed="0.000180"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:44.382899" level="INFO">${karaf_connection_index} = 12</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-10-06T01:23:44.382652" elapsed="0.000272"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:44.383254" 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-10-06T01:23:44.383083" elapsed="0.000195"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:44.420836" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:44.383874" elapsed="0.037140"/>
</kw>
<msg time="2026-10-06T01:23:44.421236" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:44.421279" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:44.383443" elapsed="0.037873"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:44.518497" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CA
 "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:44.421948" elapsed="0.096747"/>
</kw>
<msg time="2026-10-06T01:23:44.518856" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:44.518898" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:44.421499" elapsed="0.097434"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:44.519205" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:44.519003" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.518985" elapsed="0.000315"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:44.519850" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CA
 "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:44.519493" elapsed="0.000436"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:44.520190" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:44.519990" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.519974" elapsed="0.000309"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:44.520313" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:44.522793" elapsed="0.000481"/>
</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-10-06T01:23:44.524510" elapsed="0.000480"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:44.526369" elapsed="0.000340"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:44.521110" elapsed="0.005667"/>
</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-10-06T01:23:44.520593" elapsed="0.006301"/>
</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="PASS" start="2026-10-06T01:23:44.382089" elapsed="0.144881"/>
</kw>
<msg time="2026-10-06T01:23:44.527052" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:44.527092" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:44.381499" elapsed="0.145627"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:44.527279" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:44.527195" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.527178" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:44.527763" elapsed="0.000026"/>
</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-10-06T01:23:44.528070" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:44.528136" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:23:44.380897" elapsed="0.147324"/>
</kw>
<msg time="2026-10-06T01:23:44.528305" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:44.528344" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:44.379045" elapsed="0.149334"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:44.528721" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:44.528489" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.528471" elapsed="0.000323"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:44.378903" elapsed="0.149913"/>
</iter>
<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-10-06T01:23:44.531354" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:44.531269" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.531252" elapsed="0.000165"/>
</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-10-06T01:23:44.532546" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:44.532461" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.532444" elapsed="0.000168"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:44.533002" level="INFO">${karaf_connection_index} = 14</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-10-06T01:23:44.532774" elapsed="0.000253"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:44.533375" 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-10-06T01:23:44.533185" elapsed="0.000231"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:44.567297" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:44.534039" elapsed="0.033502"/>
</kw>
<msg time="2026-10-06T01:23:44.567719" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:44.567762" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:44.533608" elapsed="0.034189"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:44.635390" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CA
 "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:44.568440" elapsed="0.067142"/>
</kw>
<msg time="2026-10-06T01:23:44.635762" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:44.635803" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:44.567960" elapsed="0.067878"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:44.636110" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:44.635908" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.635890" elapsed="0.000315"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:44.636756" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CA
 "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:44.636391" elapsed="0.000445"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:44.637093" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:44.636897" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.636880" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:44.637216" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:44.639698" elapsed="0.000471"/>
</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-10-06T01:23:44.641406" elapsed="0.000530"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:44.643249" elapsed="0.000322"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:44.638008" elapsed="0.005628"/>
</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-10-06T01:23:44.637497" elapsed="0.006271"/>
</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="PASS" start="2026-10-06T01:23:44.532191" elapsed="0.111654"/>
</kw>
<msg time="2026-10-06T01:23:44.643959" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:44.643999" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:44.531581" elapsed="0.112453"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:44.644189" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:44.644104" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.644087" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:44.644592" elapsed="0.000024"/>
</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-10-06T01:23:44.644978" elapsed="0.000029"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:44.645050" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:23:44.530977" elapsed="0.114160"/>
</kw>
<msg time="2026-10-06T01:23:44.645220" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:44.645259" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:44.529066" elapsed="0.116228"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:44.645597" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:44.645367" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:44.645346" elapsed="0.000323"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:44.528925" elapsed="0.116782"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:44.259667" elapsed="0.386067"/>
</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-10-06T01:23:44.257541" elapsed="0.388244"/>
</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-10-06T01:23:44.255640" elapsed="0.390197"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:44.255231" elapsed="0.390648"/>
</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-10-06T01:23:44.254202" elapsed="0.391731"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:23:44.649346" level="INFO">${port_dictionary} = {'br01': '6', 'vx2': '3', '10.0.0.19': '1'}</msg>
<var>${port_dictionary}</var>
<arg>br01=6</arg>
<arg>vx2=3</arg>
<arg>10.0.0.19=1</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:23:44.649019" elapsed="0.000352"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:23:44.653856" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:23:44.652562" elapsed="0.001328">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:23:45.663042" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:23:45.660129" elapsed="0.002994">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:23:46.672435" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:23:46.669537" elapsed="0.003000">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:23:47.682160" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:23:47.679080" elapsed="0.003166">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:23:48.691749" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:23:48.688729" elapsed="0.003102">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:23:49.748034" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:23:49.746129" elapsed="0.001969">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<msg time="2026-10-06T01:23:49.748244" level="FAIL">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</msg>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-10-06T01:23:44.649582" elapsed="5.098840">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:23:44.648641" elapsed="5.099966">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify port is modified in all instances.</doc>
<status status="FAIL" start="2026-10-06T01:23:44.253732" elapsed="5.495082">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s1-s1-t42" name="Delete Port In Old Owner After Recover" line="198">
<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-10-06T01:23:49.751018" elapsed="0.000327"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:23:49.750643" elapsed="0.000775"/>
</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-10-06T01:23:49.752801" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:49.752630" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:49.752600" elapsed="0.000297"/>
</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-10-06T01:23:49.755553" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:49.755416" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:49.755393" elapsed="0.000248"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:49.756950" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:49.756443" elapsed="0.000542"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:49.757595" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:49.757194" elapsed="0.000436"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:49.757707" elapsed="0.000041"/>
</return>
<msg time="2026-10-06T01:23:49.757892" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:49.755950" elapsed="0.001974"/>
</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-10-06T01:23:49.761527" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:49.761388" elapsed="0.000242"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:49.761364" elapsed="0.000297"/>
</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-10-06T01:23:49.763273" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:49.763155" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:49.763131" elapsed="0.000230"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:49.763921" 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-10-06T01:23:49.763574" elapsed="0.000383"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:49.764425" 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-10-06T01:23:49.764181" elapsed="0.000278"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:49.797368" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:49.765295" elapsed="0.032267"/>
</kw>
<msg time="2026-10-06T01:23:49.797799" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:49.798047" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:49.764722" elapsed="0.033365"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:49.862549" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "[78Cr "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:49.798723" elapsed="0.064027"/>
</kw>
<msg time="2026-10-06T01:23:49.862909" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:49.862950" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:49.798254" elapsed="0.064731"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:49.863263" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:49.863056" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:49.863038" elapsed="0.000319"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:49.863909" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "[78Cr "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:49.863548" elapsed="0.000441"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:49.864247" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:49.864051" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:49.864034" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:49.864370" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:49.866918" elapsed="0.000479"/>
</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-10-06T01:23:49.868698" elapsed="0.000481"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:49.870559" elapsed="0.000333"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:49.865187" elapsed="0.005770"/>
</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-10-06T01:23:49.864668" elapsed="0.006405"/>
</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="PASS" start="2026-10-06T01:23:49.762795" elapsed="0.108354"/>
</kw>
<msg time="2026-10-06T01:23:49.871230" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:49.871270" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:49.761887" elapsed="0.109419"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:49.871460" elapsed="0.000072"/>
</return>
<status status="PASS" start="2026-10-06T01:23:49.871375" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:49.871358" elapsed="0.000231"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:23:49.871985" elapsed="0.000024"/>
</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-10-06T01:23:49.872281" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:49.872345" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:49.760981" elapsed="0.111448"/>
</kw>
<msg time="2026-10-06T01:23:49.872534" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:49.872575" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:49.758394" elapsed="0.114216"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:49.872952" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:49.872731" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:49.872712" elapsed="0.000311"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:49.758199" elapsed="0.114846"/>
</iter>
<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-10-06T01:23:49.875593" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:49.875491" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:49.875474" elapsed="0.000183"/>
</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-10-06T01:23:49.876770" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:49.876663" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:49.876646" elapsed="0.000187"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:49.877203" level="INFO">${karaf_connection_index} = 12</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-10-06T01:23:49.876976" elapsed="0.000251"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:49.877572" 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-10-06T01:23:49.877386" elapsed="0.000210"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:49.916450" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:49.878180" elapsed="0.038464"/>
</kw>
<msg time="2026-10-06T01:23:49.916825" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:49.916866" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:49.877767" elapsed="0.039135"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:49.979101" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "[78Cr "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:49.917489" elapsed="0.061796"/>
</kw>
<msg time="2026-10-06T01:23:49.979443" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:49.979484" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:49.917067" elapsed="0.062466"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:49.979833" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:49.979604" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:49.979586" elapsed="0.000341"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:49.980444" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "[78Cr "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:49.980105" elapsed="0.000433"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:49.980815" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:49.980599" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:49.980583" elapsed="0.000326"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:49.980939" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:49.983394" elapsed="0.000530"/>
</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-10-06T01:23:49.985174" elapsed="0.000472"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:49.986969" elapsed="0.000302"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:49.981734" elapsed="0.005601"/>
</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-10-06T01:23:49.981204" elapsed="0.006245"/>
</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="PASS" start="2026-10-06T01:23:49.876391" elapsed="0.111148"/>
</kw>
<msg time="2026-10-06T01:23:49.987657" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:49.987777" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:49.875822" elapsed="0.111993"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:49.987972" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:49.987886" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:49.987869" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:49.988358" elapsed="0.000026"/>
</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-10-06T01:23:49.988670" elapsed="0.000039"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:49.988752" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:49.875200" elapsed="0.113637"/>
</kw>
<msg time="2026-10-06T01:23:49.988922" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:49.988962" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:49.873290" elapsed="0.115706"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:49.989279" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:49.989064" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:49.989048" elapsed="0.000302"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:49.873156" elapsed="0.116215"/>
</iter>
<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-10-06T01:23:49.991959" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:49.991874" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:49.991857" elapsed="0.000164"/>
</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-10-06T01:23:49.993119" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:49.993035" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:49.993019" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:49.993560" level="INFO">${karaf_connection_index} = 14</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-10-06T01:23:49.993322" elapsed="0.000263"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:49.993935" 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-10-06T01:23:49.993763" elapsed="0.000196"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:50.029264" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:49.994529" elapsed="0.034915"/>
</kw>
<msg time="2026-10-06T01:23:50.029616" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:50.029657" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:49.994110" elapsed="0.035605"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:50.099337" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "[78Cr "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:50.030298" elapsed="0.069228"/>
</kw>
<msg time="2026-10-06T01:23:50.099706" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:50.099749" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.029881" elapsed="0.069904"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.100060" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:50.099855" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.099837" elapsed="0.000353"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:50.100744" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "[78Cr "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:50.100370" elapsed="0.000456"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.101085" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:50.100888" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.100871" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:50.101207" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:50.103694" elapsed="0.000474"/>
</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-10-06T01:23:50.105391" elapsed="0.000493"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:50.107258" elapsed="0.000319"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:50.102004" elapsed="0.005640"/>
</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-10-06T01:23:50.101476" elapsed="0.006301"/>
</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="PASS" start="2026-10-06T01:23:49.992777" elapsed="0.115077"/>
</kw>
<msg time="2026-10-06T01:23:50.107935" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:50.107974" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:49.992168" elapsed="0.115841"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:50.108163" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:50.108078" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.108061" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.108574" elapsed="0.000024"/>
</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-10-06T01:23:50.108965" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:50.109029" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:23:49.991567" elapsed="0.117548"/>
</kw>
<msg time="2026-10-06T01:23:50.109200" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:50.109239" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:49.989628" elapsed="0.119646"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.109573" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:50.109341" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.109325" elapsed="0.000319"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:49.989478" elapsed="0.120187"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:49.757995" elapsed="0.351714"/>
</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-10-06T01:23:49.755002" elapsed="0.354760"/>
</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-10-06T01:23:49.752239" elapsed="0.357574"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:49.751641" elapsed="0.358213"/>
</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-10-06T01:23:49.750124" elapsed="0.359778"/>
</kw>
<kw name="Delete Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:23:50.114066" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Delete port vx2 from bridge br01 in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:23:50.112828" elapsed="0.001272">Variable '${original_owner}' not found.</status>
</kw>
<doc>Delete port in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:23:49.749320" elapsed="0.364936">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t43" name="Delete Bridge In Old Owner And Verify After Recover" line="202">
<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-10-06T01:23:50.115706" elapsed="0.000200"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:23:50.115421" elapsed="0.000534"/>
</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-10-06T01:23:50.116850" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:50.116765" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.116748" elapsed="0.000164"/>
</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-10-06T01:23:50.118776" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:50.118691" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.118660" elapsed="0.000178"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:50.119756" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:50.119389" elapsed="0.000393"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:50.120226" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:50.119944" elapsed="0.000306"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:50.120291" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:23:50.120416" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:50.119037" elapsed="0.001402"/>
</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-10-06T01:23:50.122974" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:50.122890" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.122873" elapsed="0.000165"/>
</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-10-06T01:23:50.124130" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:50.124048" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.124031" elapsed="0.000161"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:50.124574" 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-10-06T01:23:50.124333" elapsed="0.000266"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:50.124947" 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-10-06T01:23:50.124776" elapsed="0.000195"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:50.157255" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:50.125541" elapsed="0.031912"/>
</kw>
<msg time="2026-10-06T01:23:50.157631" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:50.157672" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.125122" elapsed="0.032645"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:50.247739" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "d "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:50.158346" elapsed="0.089579"/>
</kw>
<msg time="2026-10-06T01:23:50.248083" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:50.248125" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.157932" elapsed="0.090228"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.248434" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:50.248231" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.248212" elapsed="0.000331"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:50.249115" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "d "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:50.248774" elapsed="0.000426"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.249458" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:50.249262" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.249245" elapsed="0.000326"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:50.249602" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:50.252136" elapsed="0.000491"/>
</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-10-06T01:23:50.253885" elapsed="0.000451"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:50.255546" elapsed="0.000537"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:50.250372" elapsed="0.005777"/>
</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-10-06T01:23:50.249885" elapsed="0.006398"/>
</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="PASS" start="2026-10-06T01:23:50.123791" elapsed="0.132570"/>
</kw>
<msg time="2026-10-06T01:23:50.256443" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:50.256482" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.123182" elapsed="0.133347"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:50.256701" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:23:50.256599" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.256582" elapsed="0.000198"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:23:50.257106" elapsed="0.000024"/>
</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-10-06T01:23:50.257403" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:50.257466" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:50.122585" elapsed="0.134980"/>
</kw>
<msg time="2026-10-06T01:23:50.257649" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:50.257778" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.120794" elapsed="0.137022"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.258102" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:50.257885" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.257869" elapsed="0.000304"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:50.120641" elapsed="0.137552"/>
</iter>
<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-10-06T01:23:50.260709" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:50.260603" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.260585" elapsed="0.000188"/>
</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-10-06T01:23:50.261872" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:50.261788" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.261771" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:50.262296" level="INFO">${karaf_connection_index} = 12</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-10-06T01:23:50.262074" elapsed="0.000247"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:50.262663" 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-10-06T01:23:50.262480" elapsed="0.000223"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:50.297184" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:50.263303" elapsed="0.034072"/>
</kw>
<msg time="2026-10-06T01:23:50.297551" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:50.297593" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.262892" elapsed="0.034736"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:50.377299" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "d "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:50.298230" elapsed="0.079262"/>
</kw>
<msg time="2026-10-06T01:23:50.377672" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:50.377738" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.297811" elapsed="0.079963"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.378059" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:50.377849" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.377829" elapsed="0.000327"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:50.378708" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "d "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:50.378333" elapsed="0.000462"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.379055" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:50.378857" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.378841" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:50.379177" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:50.381645" elapsed="0.000490"/>
</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-10-06T01:23:50.383364" elapsed="0.000490"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:50.385039" elapsed="0.000310"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:50.379974" elapsed="0.005469"/>
</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-10-06T01:23:50.379444" elapsed="0.006139"/>
</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="PASS" start="2026-10-06T01:23:50.261490" elapsed="0.124171"/>
</kw>
<msg time="2026-10-06T01:23:50.385786" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:50.385826" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.260919" elapsed="0.124942"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:50.386017" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:50.385931" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.385914" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.386405" elapsed="0.000023"/>
</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-10-06T01:23:50.386771" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:50.386836" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:50.260299" elapsed="0.126621"/>
</kw>
<msg time="2026-10-06T01:23:50.387039" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:50.387079" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.258438" elapsed="0.128676"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.387435" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:50.387198" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.387181" elapsed="0.000340"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:50.258302" elapsed="0.129240"/>
</iter>
<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-10-06T01:23:50.390295" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:50.390211" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.390193" elapsed="0.000165"/>
</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-10-06T01:23:50.391455" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:50.391371" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.391354" elapsed="0.000181"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:50.391926" level="INFO">${karaf_connection_index} = 14</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-10-06T01:23:50.391699" elapsed="0.000252"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:50.392277" 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-10-06T01:23:50.392109" elapsed="0.000192"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:50.444710" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:50.392905" elapsed="0.051982"/>
</kw>
<msg time="2026-10-06T01:23:50.445058" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:50.445100" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.392459" elapsed="0.052676"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:50.538791" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "d "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:50.445757" elapsed="0.093215"/>
</kw>
<msg time="2026-10-06T01:23:50.539129" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:50.539170" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.445298" elapsed="0.093907"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.539479" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:50.539276" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.539258" elapsed="0.000333"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:50.540127" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "d "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:50.539791" elapsed="0.000421"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.540468" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:50.540273" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.540257" elapsed="0.000320"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:50.540607" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:50.543065" elapsed="0.000487"/>
</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-10-06T01:23:50.544788" elapsed="0.000443"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:50.546433" elapsed="0.000552"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:50.541396" elapsed="0.005656"/>
</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-10-06T01:23:50.540904" elapsed="0.006262"/>
</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="PASS" start="2026-10-06T01:23:50.391114" elapsed="0.156129"/>
</kw>
<msg time="2026-10-06T01:23:50.547324" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:50.547363" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.390521" elapsed="0.156878"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:50.547579" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:50.547473" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.547456" elapsed="0.000200"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.547985" elapsed="0.000024"/>
</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-10-06T01:23:50.548283" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:50.548347" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:50.389918" elapsed="0.158513"/>
</kw>
<msg time="2026-10-06T01:23:50.548529" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:50.548571" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.388059" elapsed="0.160548"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.548982" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:50.548762" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.548660" elapsed="0.000393"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:50.387654" elapsed="0.161420"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:50.120486" elapsed="0.428614"/>
</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-10-06T01:23:50.118369" elapsed="0.430781"/>
</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-10-06T01:23:50.116478" elapsed="0.432724"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.116098" elapsed="0.433145"/>
</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-10-06T01:23:50.115083" elapsed="0.434207"/>
</kw>
<kw name="Delete Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:23:50.553354" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Delete bridge br01 in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:23:50.552073" elapsed="0.001316">Variable '${original_owner}' not found.</status>
</kw>
<doc>Delete bridge in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:23:50.114544" elapsed="0.438985">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t44" name="Cleans Up Test Environment For Next Suite" line="206">
<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-10-06T01:23:50.554935" elapsed="0.000199"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:23:50.554690" elapsed="0.000494"/>
</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-10-06T01:23:50.556083" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:50.555997" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.555980" elapsed="0.000165"/>
</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-10-06T01:23:50.558019" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:50.557935" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.557918" elapsed="0.000162"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:50.558982" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:50.558642" elapsed="0.000366"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:50.559464" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:50.559193" elapsed="0.000296"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:50.559546" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:23:50.559687" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:50.558278" elapsed="0.001435"/>
</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-10-06T01:23:50.562197" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:50.562113" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.562096" elapsed="0.000164"/>
</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-10-06T01:23:50.563346" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:50.563263" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.563246" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:50.563817" 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-10-06T01:23:50.563571" elapsed="0.000271"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:50.564169" 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-10-06T01:23:50.564001" elapsed="0.000192"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:50.597807" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:50.564786" elapsed="0.033263"/>
</kw>
<msg time="2026-10-06T01:23:50.598216" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:50.598258" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.564344" elapsed="0.033949"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:50.672574" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "l "e "a "n "s "[C "U "p "[C "T "e "s "t "[C "E "n "v "i "r "o "n "m "[78Ce "[A[78Cn
 "t "[C "F "o "r "[C "N "e "x "t "[C "S "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:50.598928" elapsed="0.073849"/>
</kw>
<msg time="2026-10-06T01:23:50.672937" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:50.672979" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.598463" elapsed="0.074551"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.673296" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:50.673085" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.673065" elapsed="0.000324"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:50.673941" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "l "e "a "n "s "[C "U "p "[C "T "e "s "t "[C "E "n "v "i "r "o "n "m "[78Ce "[A[78Cn
 "t "[C "F "o "r "[C "N "e "x "t "[C "S "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:50.673584" elapsed="0.000439"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.674283" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:50.674085" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.674068" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:50.674403" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:50.676904" elapsed="0.000475"/>
</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-10-06T01:23:50.678648" elapsed="0.000474"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:50.680306" elapsed="0.000323"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:50.675204" elapsed="0.005512"/>
</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-10-06T01:23:50.674712" elapsed="0.006181"/>
</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="PASS" start="2026-10-06T01:23:50.563006" elapsed="0.117964"/>
</kw>
<msg time="2026-10-06T01:23:50.681051" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:50.681089" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.562406" elapsed="0.118718"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:50.681278" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:50.681193" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.681176" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:23:50.681987" elapsed="0.000026"/>
</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-10-06T01:23:50.682288" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:50.682353" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:50.561824" elapsed="0.120614"/>
</kw>
<msg time="2026-10-06T01:23:50.682547" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:50.682588" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.560035" elapsed="0.122587"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.682924" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:50.682706" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.682689" elapsed="0.000306"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:50.559898" elapsed="0.123117"/>
</iter>
<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-10-06T01:23:50.685550" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:50.685426" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.685405" elapsed="0.000219"/>
</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-10-06T01:23:50.686831" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:50.686746" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.686729" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:50.687257" level="INFO">${karaf_connection_index} = 12</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-10-06T01:23:50.687034" elapsed="0.000247"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:50.687626" 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-10-06T01:23:50.687439" elapsed="0.000211"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:50.722022" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:50.688226" elapsed="0.033980"/>
</kw>
<msg time="2026-10-06T01:23:50.722363" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:50.722409" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.687819" elapsed="0.034634"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:50.809302" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "l "e "a "n "s "[C "U "p "[C "T "e "s "t "[C "E "n "v "i "r "o "n "m "[78Ce "[A[78Cn
 "t "[C "F "o "r "[C "N "e "x "t "[C "S "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:50.723096" elapsed="0.086383"/>
</kw>
<msg time="2026-10-06T01:23:50.809652" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:50.809718" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.722658" elapsed="0.087096"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.810062" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:50.809859" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.809840" elapsed="0.000315"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:50.810697" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "l "e "a "n "s "[C "U "p "[C "T "e "s "t "[C "E "n "v "i "r "o "n "m "[78Ce "[A[78Cn
 "t "[C "F "o "r "[C "N "e "x "t "[C "S "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:50.810331" elapsed="0.000450"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.811039" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:50.810843" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.810826" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:50.811162" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:50.813626" elapsed="0.000488"/>
</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-10-06T01:23:50.815314" elapsed="0.000535"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:50.817178" elapsed="0.000300"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:50.811987" elapsed="0.005573"/>
</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-10-06T01:23:50.811436" elapsed="0.006254"/>
</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="PASS" start="2026-10-06T01:23:50.686411" elapsed="0.131358"/>
</kw>
<msg time="2026-10-06T01:23:50.817850" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:50.817890" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.685785" elapsed="0.132141"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:50.818078" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:50.817993" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.817976" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.818467" elapsed="0.000023"/>
</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-10-06T01:23:50.818881" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:50.818947" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:23:50.685128" elapsed="0.133906"/>
</kw>
<msg time="2026-10-06T01:23:50.819118" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:50.819157" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.683259" elapsed="0.135934"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.819482" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:50.819261" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.819245" elapsed="0.000329"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:50.683123" elapsed="0.136472"/>
</iter>
<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-10-06T01:23:50.822184" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:50.822100" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.822083" elapsed="0.000164"/>
</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-10-06T01:23:50.823334" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:50.823250" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.823233" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:50.823873" level="INFO">${karaf_connection_index} = 14</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-10-06T01:23:50.823623" elapsed="0.000276"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:50.824227" 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-10-06T01:23:50.824058" elapsed="0.000194"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:50.861606" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:50.824844" elapsed="0.036963"/>
</kw>
<msg time="2026-10-06T01:23:50.861965" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:50.862006" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.824404" elapsed="0.037638"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:50.940937" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "l "e "a "n "s "[C "U "p "[C "T "e "s "t "[C "E "n "v "i "r "o "n "m "[78Ce "[A[78Cn
 "t "[C "F "o "r "[C "N "e "x "t "[C "S "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:50.862640" elapsed="0.078482"/>
</kw>
<msg time="2026-10-06T01:23:50.941286" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:50.941328" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.862205" elapsed="0.079159"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.941661" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:50.941438" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.941419" elapsed="0.000372"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:50.942316" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "l "e "a "n "s "[C "U "p "[C "T "e "s "t "[C "E "n "v "i "r "o "n "m "[78Ce "[A[78Cn
 "t "[C "F "o "r "[C "N "e "x "t "[C "S "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:50.941969" elapsed="0.000429"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.942693" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:50.942466" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.942447" elapsed="0.000342"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:50.942820" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:50.945297" elapsed="0.000516"/>
</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-10-06T01:23:50.947037" elapsed="0.000494"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:50.948745" elapsed="0.000307"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:50.943593" elapsed="0.005523"/>
</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-10-06T01:23:50.943085" elapsed="0.006148"/>
</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="PASS" start="2026-10-06T01:23:50.822993" elapsed="0.126317"/>
</kw>
<msg time="2026-10-06T01:23:50.949392" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:50.949432" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.822392" elapsed="0.127076"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:50.949635" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:50.949549" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.949531" elapsed="0.000197"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.950041" elapsed="0.000024"/>
</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-10-06T01:23:50.950374" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:50.950449" elapsed="0.000018"/>
</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="PASS" start="2026-10-06T01:23:50.821809" elapsed="0.128762"/>
</kw>
<msg time="2026-10-06T01:23:50.950662" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:50.950718" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.819855" elapsed="0.130898"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.951038" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:50.950822" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.950806" elapsed="0.000303"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:50.819718" elapsed="0.131413"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:50.559760" elapsed="0.391397"/>
</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-10-06T01:23:50.557625" elapsed="0.393581"/>
</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-10-06T01:23:50.555744" elapsed="0.395511"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:50.555327" elapsed="0.395968"/>
</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-10-06T01:23:50.554307" elapsed="0.397036"/>
</kw>
<kw name="Configure Exit OVSDB Connection" owner="ClusterOvsdb">
<kw name="Clean OVSDB Test Environment" owner="OVSDB">
<kw name="Clean Mininet System" owner="Utils">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:50.955639" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:50.955391" elapsed="0.000327"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:50.955374" elapsed="0.000368"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:50.956061" 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-10-06T01:23:50.956153" 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-10-06T01:23:50.955933" elapsed="0.000244"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:50.956797" level="INFO">Attempting to execute command "sudo mn -c" on remote system "10.30.170.234" 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-10-06T01:23:50.956384" elapsed="0.000458"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:50.957322" level="INFO">${conn_id} = 201</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-10-06T01:23:50.957019" elapsed="0.000327"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:23:50.958205" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:23:50.958274" 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-10-06T01:23:50.957927" elapsed="0.000368"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:50.958442" elapsed="0.000309"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:23:50.959519" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:23:51.422502" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:23:30 UTC 2026

  System load:  0.17               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:23:36 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:23:50.959274" elapsed="0.463353"/>
</kw>
<msg time="2026-10-06T01:23:51.422773" 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-10-06T01:23:50.958912" elapsed="0.463940"/>
</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-10-06T01:23:50.957556" elapsed="0.465402"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:23:51.423440" level="INFO">Executing command 'sudo mn -c'.</msg>
<msg time="2026-10-06T01:23:52.590806" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:23:52.591196" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:23:52.591289" level="INFO">${stderr} = *** Removing excess controllers/ofprotocols/ofdatapaths/pings/noxes
killall controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec iv...</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-10-06T01:23:51.423232" elapsed="1.168112"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:52.591893" elapsed="0.000594"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:52.593673" level="INFO">*** Removing excess controllers/ofprotocols/ofdatapaths/pings/noxes
killall controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec ivs ryu-manager 2&gt; /dev/null
killall -9 controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec ivs ryu-manager 2&gt; /dev/null
pkill -9 -f "sudo mnexec"
*** Removing junk from /tmp
rm -f /tmp/vconn* /tmp/vlogs* /tmp/*.out /tmp/*.log
*** Removing old X11 tunnels
*** Removing excess kernel datapaths
ps ax | egrep -o 'dp[0-9]+' | sed 's/dp/nl:/'
***  Removing OVS datapaths
ovs-vsctl --timeout=1 list-br
ovs-vsctl --timeout=1 list-br
*** Removing all links of the pattern foo-ethX
ip link show | egrep -o '([-_.[:alnum:]]+-eth[[:digit:]]+)'
ip link show
*** Killing stale mininet node processes
pkill -9 -f mininet:
*** Shutting down stale tunnels
pkill -9 -f Tunnel=Ethernet
pkill -9 -f .ssh/mn
rm -f ~/.ssh/mn/*
*** Cleanup complete.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:52.593045" elapsed="0.000774"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:52.594235" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:52.593987" elapsed="0.000353"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:52.593935" elapsed="0.000455"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:23:52.594739" elapsed="0.000068"/>
</return>
<status status="PASS" start="2026-10-06T01:23:52.594499" elapsed="0.000377"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:52.594467" elapsed="0.000459"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:52.594996" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:52.596654" elapsed="0.001106"/>
</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-10-06T01:23:52.598181" elapsed="0.000319"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:52.598912" elapsed="0.000221"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:52.595711" elapsed="0.003530"/>
</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-10-06T01:23:50.954973" elapsed="1.644426"/>
</kw>
<msg time="2026-10-06T01:23:52.599505" 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-10-06T01:23:50.954423" elapsed="1.645213"/>
</kw>
<arg>${system}</arg>
<arg>sudo mn -c</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:23:50.952646" elapsed="1.647186"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:52.603954" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:52.603379" elapsed="0.000692"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:52.603339" elapsed="0.000783"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:52.604878" 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-10-06T01:23:52.605079" 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-10-06T01:23:52.604568" elapsed="0.000566"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:52.606255" level="INFO">Attempting to execute command "sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh" on remote system "10.30.170.234" 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-10-06T01:23:52.605575" elapsed="0.000776"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:52.607584" level="INFO">${conn_id} = 203</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-10-06T01:23:52.606890" elapsed="0.000749"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:23:52.609498" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:23:52.609706" 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-10-06T01:23:52.608940" elapsed="0.000818"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:52.610090" elapsed="0.000685"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:23:52.612507" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:23:52.993723" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:23:30 UTC 2026

  System load:  0.17               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:23:51 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:23:52.611995" elapsed="0.381804"/>
</kw>
<msg time="2026-10-06T01:23:52.993852" 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-10-06T01:23:52.611137" elapsed="0.382768"/>
</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-10-06T01:23:52.608095" elapsed="0.385885"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:23:52.994333" level="INFO">Executing command 'sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh'.</msg>
<msg time="2026-10-06T01:23:53.037053" level="INFO">Command exited with return code -1.</msg>
<msg time="2026-10-06T01:23:53.037270" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:23:53.037355" level="INFO">${stderr} = </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-10-06T01:23:52.994178" elapsed="0.043223"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:53.037800" elapsed="0.000719"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:53.039585" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:53.039037" elapsed="0.000662"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:53.040056" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:53.039849" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:53.039806" elapsed="0.000391"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:23:53.040484" elapsed="0.000078"/>
</return>
<status status="PASS" start="2026-10-06T01:23:53.040305" elapsed="0.000327"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:53.040274" elapsed="0.000435"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:53.040780" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:53.042315" elapsed="0.000676"/>
</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-10-06T01:23:53.043392" elapsed="0.000357"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:53.044065" elapsed="0.000195"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:53.041400" elapsed="0.002965"/>
</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-10-06T01:23:52.602382" elapsed="0.442133"/>
</kw>
<msg time="2026-10-06T01:23:53.044640" 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-10-06T01:23:52.601177" elapsed="0.443594"/>
</kw>
<arg>${system}</arg>
<arg>sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:23:52.600183" elapsed="0.444746"/>
</kw>
<arg>${tools_system}</arg>
<status status="PASS" start="2026-10-06T01:23:50.952327" elapsed="2.092710"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:53.049373" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:53.048859" elapsed="0.000629"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:53.048819" elapsed="0.000741"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:53.050283" 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-10-06T01:23:53.050481" 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-10-06T01:23:53.050019" elapsed="0.000538"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:53.051672" level="INFO">Attempting to execute command "sudo ovs-vsctl del-manager" on remote system "10.30.170.234" 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-10-06T01:23:53.051006" elapsed="0.000791"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:53.052934" level="INFO">${conn_id} = 205</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-10-06T01:23:53.052220" elapsed="0.000768"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:23:53.054853" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:23:53.055008" 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-10-06T01:23:53.054258" elapsed="0.000798"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:53.055382" elapsed="0.000724"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:23:53.057951" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:23:53.450661" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:23:30 UTC 2026

  System load:  0.17               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:23:52 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:23:53.057377" elapsed="0.393388"/>
</kw>
<msg time="2026-10-06T01:23:53.450825" 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-10-06T01:23:53.056506" elapsed="0.394422"/>
</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-10-06T01:23:53.053411" elapsed="0.397605"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:23:53.451385" level="INFO">Executing command 'sudo ovs-vsctl del-manager'.</msg>
<msg time="2026-10-06T01:23:53.494577" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:23:53.494837" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:23:53.494926" level="INFO">${stderr} = </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-10-06T01:23:53.451229" elapsed="0.043744"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:53.495323" elapsed="0.000592"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:53.496963" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:53.496375" elapsed="0.000674"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:53.497411" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:53.497197" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:53.497153" elapsed="0.000427"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:23:53.497915" elapsed="0.000054"/>
</return>
<status status="PASS" start="2026-10-06T01:23:53.497720" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:53.497659" elapsed="0.000427"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:53.498154" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:53.499755" elapsed="0.000624"/>
</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-10-06T01:23:53.500836" elapsed="0.000309"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:53.501456" elapsed="0.000338"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:53.498832" elapsed="0.003072"/>
</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-10-06T01:23:53.047859" elapsed="0.454200"/>
</kw>
<msg time="2026-10-06T01:23:53.502163" 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-10-06T01:23:53.046481" elapsed="0.455784"/>
</kw>
<arg>${tools_system}</arg>
<arg>sudo ovs-vsctl del-manager</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:23:53.045491" elapsed="0.456934"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:53.506603" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:53.506059" elapsed="0.000716"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:53.506017" elapsed="0.000812"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:53.507514" 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-10-06T01:23:53.507769" 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-10-06T01:23:53.507251" elapsed="0.000575"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:53.508931" level="INFO">Attempting to execute command "sudo /usr/share/openvswitch/scripts/ovs-ctl stop" on remote system "10.30.170.234" 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-10-06T01:23:53.508238" elapsed="0.000789"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:53.510111" level="INFO">${conn_id} = 207</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-10-06T01:23:53.509412" elapsed="0.000753"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:23:53.512010" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:23:53.512164" 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-10-06T01:23:53.511422" elapsed="0.000791"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:53.512564" elapsed="0.000665"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:23:53.515082" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:23:53.950571" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:23:30 UTC 2026

  System load:  0.17               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:23:53 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:23:53.514444" elapsed="0.436222"/>
</kw>
<msg time="2026-10-06T01:23:53.950743" 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-10-06T01:23:53.513610" elapsed="0.437197"/>
</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-10-06T01:23:53.510610" elapsed="0.440285"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:23:53.951271" level="INFO">Executing command 'sudo /usr/share/openvswitch/scripts/ovs-ctl stop'.</msg>
<msg time="2026-10-06T01:23:54.226989" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:23:54.227221" level="INFO">${stdout} =  * Exiting ovs-vswitchd (837)
 * Exiting ovsdb-server (817)</msg>
<msg time="2026-10-06T01:23:54.227311" level="INFO">${stderr} = </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-10-06T01:23:53.951107" elapsed="0.276252"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:54.227773" elapsed="0.000433"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:54.229347" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:54.228809" elapsed="0.000623"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:54.229867" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:54.229616" elapsed="0.000352"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:54.229537" elapsed="0.000479"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:23:54.230305" elapsed="0.000054"/>
</return>
<status status="PASS" start="2026-10-06T01:23:54.230124" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:54.230092" elapsed="0.000383"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:54.230541" elapsed="0.000051"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:54.232150" elapsed="0.000668"/>
</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-10-06T01:23:54.233221" elapsed="0.000298"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:54.233892" elapsed="0.000194"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:54.231224" elapsed="0.002964"/>
</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-10-06T01:23:53.505041" elapsed="0.729302"/>
</kw>
<msg time="2026-10-06T01:23:54.234447" 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-10-06T01:23:53.503845" elapsed="0.730725"/>
</kw>
<arg>${tools_system}</arg>
<arg>sudo /usr/share/openvswitch/scripts/ovs-ctl stop</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:23:53.502867" elapsed="0.731895"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:54.238919" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:54.238345" elapsed="0.000692"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:54.238306" elapsed="0.000782"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:54.239828" 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-10-06T01:23:54.240030" 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-10-06T01:23:54.239505" elapsed="0.000578"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:54.241186" level="INFO">Attempting to execute command "sudo rm -rf /etc/openvswitch/conf.db" on remote system "10.30.170.234" 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-10-06T01:23:54.240493" elapsed="0.000787"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:54.242365" level="INFO">${conn_id} = 209</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-10-06T01:23:54.241715" elapsed="0.000702"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:23:54.244470" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:23:54.244655" 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-10-06T01:23:54.243931" elapsed="0.000805"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:54.245063" elapsed="0.000680"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:23:54.247465" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:23:54.641988" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:23:30 UTC 2026

  System load:  0.17               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:23:53 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:23:54.246958" elapsed="0.395185"/>
</kw>
<msg time="2026-10-06T01:23:54.642209" 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-10-06T01:23:54.246101" elapsed="0.396173"/>
</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-10-06T01:23:54.242892" elapsed="0.399471"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:23:54.642811" level="INFO">Executing command 'sudo rm -rf /etc/openvswitch/conf.db'.</msg>
<msg time="2026-10-06T01:23:54.655826" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:23:54.655983" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:23:54.656037" level="INFO">${stderr} = </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-10-06T01:23:54.642610" elapsed="0.013456"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:54.656284" elapsed="0.000455"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:54.657410" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:54.657054" elapsed="0.000409"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:54.657761" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:54.657582" elapsed="0.000246"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:54.657533" elapsed="0.000326"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:23:54.658041" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-10-06T01:23:54.657927" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:54.657907" elapsed="0.000240"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:54.658189" elapsed="0.000018"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:54.659207" elapsed="0.000413"/>
</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-10-06T01:23:54.659895" elapsed="0.000196"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:54.660285" elapsed="0.000121"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:54.658614" elapsed="0.001856"/>
</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-10-06T01:23:54.237347" elapsed="0.423234"/>
</kw>
<msg time="2026-10-06T01:23:54.660648" 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-10-06T01:23:54.236125" elapsed="0.424606"/>
</kw>
<arg>${tools_system}</arg>
<arg>sudo rm -rf /etc/openvswitch/conf.db</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:23:54.235150" elapsed="0.425684"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:54.663376" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:54.663047" elapsed="0.000402"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:54.663023" elapsed="0.000457"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:54.663955" 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-10-06T01:23:54.664082" 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-10-06T01:23:54.663778" elapsed="0.000337"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:54.664810" level="INFO">Attempting to execute command "sudo /usr/share/openvswitch/scripts/ovs-ctl start" on remote system "10.30.170.234" 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-10-06T01:23:54.664372" elapsed="0.000498"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:54.665524" level="INFO">${conn_id} = 211</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-10-06T01:23:54.665110" elapsed="0.000477"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:23:54.666776" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:23:54.666872" 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-10-06T01:23:54.666393" elapsed="0.000509"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:54.667157" elapsed="0.000412"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:23:54.668905" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:23:55.070772" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:23:30 UTC 2026

  System load:  0.17               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:23:54 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:23:54.668318" elapsed="0.402539"/>
</kw>
<msg time="2026-10-06T01:23:55.070916" 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-10-06T01:23:54.667817" elapsed="0.403157"/>
</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-10-06T01:23:54.665899" elapsed="0.405155"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:23:55.071426" level="INFO">Executing command 'sudo /usr/share/openvswitch/scripts/ovs-ctl start'.</msg>
<msg time="2026-10-06T01:23:55.185274" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:23:55.185502" level="INFO">${stdout} =  * /etc/openvswitch/conf.db does not exist
 * Creating empty database /etc/openvswitch/conf.db
 * Starting ovsdb-server
 * system ID not configured, please use --system-id
 * Configuring Open vSwitch ...</msg>
<msg time="2026-10-06T01:23:55.185619" level="INFO">${stderr} = </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-10-06T01:23:55.071266" elapsed="0.114402"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:55.186051" elapsed="0.000412"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.187505" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:55.186976" elapsed="0.000642"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:55.188011" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:55.187799" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:55.187755" elapsed="0.000399"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:23:55.188437" elapsed="0.000053"/>
</return>
<status status="PASS" start="2026-10-06T01:23:55.188259" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:55.188228" elapsed="0.000408"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:55.188731" elapsed="0.000032"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:55.190271" elapsed="0.000674"/>
</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-10-06T01:23:55.191347" elapsed="0.000396"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:55.192055" elapsed="0.000193"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:55.189356" elapsed="0.002995"/>
</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-10-06T01:23:54.662426" elapsed="0.530074"/>
</kw>
<msg time="2026-10-06T01:23:55.192633" 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-10-06T01:23:54.661695" elapsed="0.531066"/>
</kw>
<arg>${tools_system}</arg>
<arg>sudo /usr/share/openvswitch/scripts/ovs-ctl start</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:23:54.661079" elapsed="0.531843"/>
</kw>
<arg>${TOOLS_SYSTEM_IP}</arg>
<doc>General Use Keyword attempting to sanitize test environment for OVSDB related
tests. Not every step will always be neccessary, but should not cause any problems for
any new ovsdb test suites.</doc>
<status status="PASS" start="2026-10-06T01:23:50.951989" elapsed="4.241044"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.194161" level="INFO">${dictionary} = {'ovsdb://uuid': '0'}</msg>
<var>${dictionary}</var>
<arg>ovsdb://uuid=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:23:55.193453" elapsed="0.000763"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.201600" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:55.200840" elapsed="0.000826"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.202662" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:55.202032" elapsed="0.000712"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:55.202838" elapsed="0.000060"/>
</return>
<msg time="2026-10-06T01:23:55.203123" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:55.199917" elapsed="0.003257"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.209470" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:23:55.208867" elapsed="0.000657"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:55.209641" elapsed="0.000086"/>
</return>
<msg time="2026-10-06T01:23:55.209948" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:55.208098" elapsed="0.001901"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.212649" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:55.212130" elapsed="0.000647"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.213729" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:55.213192" elapsed="0.000629"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:55.226167" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0inayb7xylqi72my9i9m65bk60.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:23:55.226454" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '144'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:23:55.226745" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:23:55.214457" elapsed="0.012345"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:55.213958" elapsed="0.012929"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:55.227279" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:55.226942" elapsed="0.000465"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:55.213921" elapsed="0.013533"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.230368" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:55.229608" elapsed="0.000861"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:55.229057" elapsed="0.001482"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:55.229018" elapsed="0.001597"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.231946" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:55.231290" elapsed="0.000748"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:55.230768" elapsed="0.001339"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:55.230731" elapsed="0.001426"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.233396" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:55.232538" elapsed="0.000914"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:55.234105" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:55.233618" elapsed="0.000605"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.235269" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:55.234644" elapsed="0.000680"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:55.234274" elapsed="0.001124"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:55.233579" elapsed="0.001865"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.236653" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:55.235870" elapsed="0.000869"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:55.237421" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:55.236958" elapsed="0.000580"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.238606" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:55.237992" elapsed="0.000671"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:55.237613" elapsed="0.001153"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:55.236917" elapsed="0.001895"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:55.239124" elapsed="0.000703"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:23:55.240741" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:55.240178" elapsed="0.000619"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:23:55.241130" elapsed="0.000528"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:23:55.228230" elapsed="0.013587"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:23:55.242139" elapsed="0.000055"/>
</return>
<status status="PASS" start="2026-10-06T01:23:55.241957" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:55.241919" elapsed="0.000393"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:55.242771" elapsed="0.000052"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:23:55.242925" elapsed="0.000032"/>
</return>
<msg time="2026-10-06T01:23:55.243411" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:23:55.210725" elapsed="0.032746"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:23:55.243597" elapsed="0.000058"/>
</return>
<msg time="2026-10-06T01:23:55.243904" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:23:55.207116" elapsed="0.036843"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.246864" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:55.245616" elapsed="0.001391"/>
</kw>
<var name="${item}">ovsdb://uuid</var>
<status status="PASS" start="2026-10-06T01:23:55.245241" elapsed="0.001849"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:23:55.244981" elapsed="0.002173"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:23:55.244408" elapsed="0.002872"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:55.203551" elapsed="0.043799"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.253149" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:55.252470" elapsed="0.000736"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:55.253299" elapsed="0.000059"/>
</return>
<msg time="2026-10-06T01:23:55.253595" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:55.251742" elapsed="0.001907"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.256280" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:55.255782" elapsed="0.000589"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.257333" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:55.256844" elapsed="0.000583"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:55.272256" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0196abtsaqd8g4mpvcap0t4mk0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:23:55.272399" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:23:55.272595" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:23:55.258122" elapsed="0.014511"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:55.257588" elapsed="0.015129"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:55.272965" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:55.272754" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:55.257525" elapsed="0.015552"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.274847" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:55.274358" elapsed="0.000549"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:55.274029" elapsed="0.000923"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:55.274005" elapsed="0.000978"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.275795" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:55.275381" elapsed="0.000472"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:55.275055" elapsed="0.000842"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:55.275033" elapsed="0.000895"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.276660" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:55.276166" elapsed="0.000548"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:55.277110" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:55.276805" elapsed="0.000378"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.277838" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:55.277429" elapsed="0.000442"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:55.277213" elapsed="0.000704"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:55.276782" elapsed="0.001162"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.278664" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:55.278175" elapsed="0.000546"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:55.279093" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:55.278812" elapsed="0.000353"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.279809" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:55.279408" elapsed="0.000436"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:55.279196" elapsed="0.000694"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:55.278788" elapsed="0.001130"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:55.280111" elapsed="0.000403"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:23:55.281071" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:55.280765" elapsed="0.000340"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:23:55.281310" elapsed="0.000308"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:23:55.273517" elapsed="0.008199"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:23:55.281918" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:23:55.281804" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:55.281781" elapsed="0.000245"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:55.282218" elapsed="0.000027"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:23:55.282305" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:23:55.282616" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:23:55.254336" elapsed="0.028315"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:23:55.282734" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:23:55.282906" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:23:55.250776" elapsed="0.032162"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.284623" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:55.284182" elapsed="0.000545"/>
</kw>
<var name="${item}">ovsdb://uuid</var>
<status status="PASS" start="2026-10-06T01:23:55.283758" elapsed="0.001021"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:23:55.283592" elapsed="0.001225"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:23:55.283262" elapsed="0.001622"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:55.247530" elapsed="0.037396"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.288424" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:55.288053" elapsed="0.000406"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:55.288517" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:23:55.288726" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:55.287589" elapsed="0.001171"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.290354" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:55.290046" elapsed="0.000366"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.291008" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:55.290703" elapsed="0.000361"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:55.304640" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0gusd5pkzmwglcb3p20r9r8j10.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:23:55.304809" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:23:55.304940" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:23:55.291457" elapsed="0.013518"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:55.291149" elapsed="0.013881"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:55.305273" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:55.305064" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:55.291125" elapsed="0.014258"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.307154" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:55.306701" elapsed="0.000513"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:55.306332" elapsed="0.000926"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:55.306307" elapsed="0.000982"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.308095" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:55.307722" elapsed="0.000431"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:55.307360" elapsed="0.000836"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:55.307338" elapsed="0.000889"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.308977" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:55.308460" elapsed="0.000553"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:55.309381" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:55.309102" elapsed="0.000352"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.310099" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:55.309733" elapsed="0.000400"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:55.309484" elapsed="0.000694"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:55.309079" elapsed="0.001126"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.310939" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:55.310436" elapsed="0.000538"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:55.311341" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:55.311063" elapsed="0.000350"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.312114" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:55.311749" elapsed="0.000400"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:55.311487" elapsed="0.000707"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:55.311039" elapsed="0.001183"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:55.312416" elapsed="0.000451"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:23:55.313387" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:23:55.313085" elapsed="0.000337"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:23:55.313650" elapsed="0.000314"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:23:55.305861" elapsed="0.008182"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:23:55.314242" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-10-06T01:23:55.314130" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:55.314107" elapsed="0.000240"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:55.314539" elapsed="0.000042"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:23:55.314646" elapsed="0.000019"/>
</return>
<msg time="2026-10-06T01:23:55.314963" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:23:55.289166" elapsed="0.025832"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:23:55.315062" elapsed="0.000034"/>
</return>
<msg time="2026-10-06T01:23:55.315228" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:23:55.287004" elapsed="0.028257"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.316983" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:23:55.316514" elapsed="0.000553"/>
</kw>
<var name="${item}">ovsdb://uuid</var>
<status status="PASS" start="2026-10-06T01:23:55.316087" elapsed="0.001033"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:23:55.315941" elapsed="0.001217"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:23:55.315542" elapsed="0.001684"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:55.285038" elapsed="0.032231"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:55.203292" elapsed="0.114011"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary {'ovsdb://uuid': '0'}.</doc>
<status status="PASS" start="2026-10-06T01:23:55.198814" elapsed="0.118553"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:23:55.194668" elapsed="0.122765"/>
</kw>
<doc>Cleans up test environment, close existing sessions.</doc>
<status status="PASS" start="2026-10-06T01:23:50.951587" elapsed="4.365924"/>
</kw>
<doc>Cleans up test environment, close existing sessions in teardown.</doc>
<status status="PASS" start="2026-10-06T01:23:50.553812" elapsed="4.763886"/>
</test>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<msg time="2026-10-06T01:23:55.318824" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects </doc>
<status status="PASS" start="2026-10-06T01:23:55.318720" elapsed="0.000411"/>
</kw>
<doc>Test suite for Ovsdb Southbound Cluster - Owner failover and recover</doc>
<status status="FAIL" start="2026-10-06T01:20:50.598276" elapsed="184.720911"/>
</suite>
<suite id="s1-s1-s2" name="Southbound Cluster Extension" source="/w/workspace/ovsdb-csit-3node-upstream-clustering-only-chromium/test/csit/suites/ovsdb/Southbound_Cluster/020__Southbound_Cluster_Extension.robot">
<kw name="Suite Setup" 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-10-06T01:23:55.349420" level="INFO">${SuiteFastFail} = False</msg>
<arg>${SuiteFastFail}</arg>
<arg>False</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-10-06T01:23:55.347945" elapsed="0.001519"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-10-06T01:23:55.347713" elapsed="0.001808"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.351893" 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-10-06T01:23:55.350478" elapsed="0.001441"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-10-06T01:23:55.352104" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:55.351990" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:55.351972" elapsed="0.000196"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.352819" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-10-06T01:23:55.352342" elapsed="0.000525"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.353313" level="INFO">${cluster_size} = 3</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-10-06T01:23:55.353031" elapsed="0.000307"/>
</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-10-06T01:23:55.353870" elapsed="0.000251"/>
</kw>
<msg time="2026-10-06T01:23:55.354209" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:55.354251" level="INFO">${possibly_int_of_members} = 3</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:55.353498" elapsed="0.000774"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.354787" level="INFO">${int_of_members} = 3</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-10-06T01:23:55.354443" elapsed="0.000369"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.355647" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:55.355388" elapsed="0.000298"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.356065" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:55.355827" elapsed="0.000262"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.356525" 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-10-06T01:23:55.356259" elapsed="0.000290"/>
</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-10-06T01:23:55.357422" elapsed="0.000169"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.358049" level="INFO">${member_ip} = 10.30.171.109</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:55.357761" elapsed="0.000312"/>
</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-10-06T01:23:55.358232" elapsed="0.000170"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.359302" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:23:55.359032" elapsed="0.000295"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:55.359368" elapsed="0.000028"/>
</return>
<msg time="2026-10-06T01:23:55.359493" 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-10-06T01:23:55.358584" elapsed="0.000932"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:55.360034" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.171.109:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b841482e50&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-10-06T01:23:55.359713" elapsed="0.000444"/>
</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-10-06T01:23:55.360314" elapsed="0.000148"/>
</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-10-06T01:23:55.356988" elapsed="0.003527"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:55.356820" elapsed="0.003733"/>
</iter>
<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-10-06T01:23:55.361254" elapsed="0.000144"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.361858" level="INFO">${member_ip} = 10.30.171.171</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:55.361549" elapsed="0.000333"/>
</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-10-06T01:23:55.362039" elapsed="0.000164"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.362918" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:55.362640" elapsed="0.000302"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:55.362983" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:23:55.363105" level="INFO">${session_alias} = ClusterManagement__session_2</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-10-06T01:23:55.362370" elapsed="0.000758"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:55.363647" level="INFO">Creating Session using : alias=ClusterManagement__session_2, url=http://10.30.171.171:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b842b07e10&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-10-06T01:23:55.363331" elapsed="0.000433"/>
</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-10-06T01:23:55.363922" elapsed="0.000147"/>
</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-10-06T01:23:55.360824" elapsed="0.003297"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:55.360647" elapsed="0.003512"/>
</iter>
<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-10-06T01:23:55.364850" elapsed="0.000143"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.365423" level="INFO">${member_ip} = 10.30.170.97</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:55.365145" elapsed="0.000303"/>
</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-10-06T01:23:55.365622" elapsed="0.000182"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.366496" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:23:55.366234" elapsed="0.000287"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:23:55.366572" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:23:55.366712" level="INFO">${session_alias} = ClusterManagement__session_3</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-10-06T01:23:55.365975" elapsed="0.000761"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:23:55.367196" level="INFO">Creating Session using : alias=ClusterManagement__session_3, url=http://10.30.170.97:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b840575190&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-10-06T01:23:55.366902" elapsed="0.000392"/>
</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-10-06T01:23:55.367449" elapsed="0.000160"/>
</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-10-06T01:23:55.364392" elapsed="0.003271"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:55.364234" elapsed="0.003482"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-10-06T01:23:55.356616" elapsed="0.011128"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.368283" level="INFO">${ClusterManagement__member_index_list} = [1, 2, 3]</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-10-06T01:23:55.367926" elapsed="0.000397"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.368883" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.171.109', 2: '10.30.171.171', 3: '10.30.170.97'}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-10-06T01:23:55.368501" elapsed="0.000423"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.369443" level="INFO">${ClusterManagement__session_list} = ['ClusterManagement__session_1', 'ClusterManagement__session_2', 'ClusterManagement__session_3']</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-10-06T01:23:55.369102" elapsed="0.000381"/>
</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-10-06T01:23:55.355025" elapsed="0.014509"/>
</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-10-06T01:23:55.350178" elapsed="0.019421"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-10-06T01:23:55.369763" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:55.369659" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:55.369641" elapsed="0.000182"/>
</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-10-06T01:23:55.371169" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:55.370846" elapsed="0.000348"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.371625" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:55.371340" elapsed="0.000310"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:55.371743" elapsed="0.000029"/>
</return>
<msg time="2026-10-06T01:23:55.371874" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:55.370515" elapsed="0.001382"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:55.372755" level="INFO">${member_ip} = 10.30.171.109</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-10-06T01:23:55.372510" elapsed="0.000270"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:55.373464" 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-10-06T01:23:55.373556" 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-10-06T01:23:55.373322" elapsed="0.000273"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:55.376728" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:55.376073" elapsed="0.000758"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:55.376032" elapsed="0.000874"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:55.377603" 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-10-06T01:23:55.377900" 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-10-06T01:23:55.377211" elapsed="0.000808"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.378914" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.171.109" 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-10-06T01:23:55.378326" elapsed="0.000743"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:55.380088" level="INFO">${conn_id} = 213</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-10-06T01:23:55.379370" elapsed="0.000830"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:23:55.381525" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:23:55.381608" 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-10-06T01:23:55.381283" elapsed="0.000348"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:55.381846" elapsed="0.000284"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:23:55.383310" level="INFO">Logging into '10.30.171.109:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:23:55.992120" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-194-generic x86_64)

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

 System information as of Tue Oct  6 01:23:55 UTC 2026

  System load:  0.36               Processes:             124
  Usage of /:   14.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.109
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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

New release '24.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:20:51 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:23:55.383068" elapsed="0.609242"/>
</kw>
<msg time="2026-10-06T01:23:55.992415" 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-10-06T01:23:55.382334" elapsed="0.610190"/>
</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-10-06T01:23:55.380583" elapsed="0.612314"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:23:55.994147" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-10-06T01:23:56.007145" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-10-06T01:23:56.007562" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:23:56.007881" 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-10-06T01:23:55.993448" elapsed="0.014699"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:56.008564" elapsed="0.000861"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:56.011351" 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-10-06T01:23:56.010448" elapsed="0.001168"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:56.012495" elapsed="0.000046"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:56.012073" elapsed="0.000556"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:56.011996" elapsed="0.000780"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:23:56.013361" elapsed="0.000091"/>
</return>
<status status="PASS" start="2026-10-06T01:23:56.012977" elapsed="0.000543"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:56.012917" elapsed="0.000745"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:56.013861" elapsed="0.000022"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:56.016122" elapsed="0.000528"/>
</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-10-06T01:23:56.017133" elapsed="0.000299"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:56.017809" elapsed="0.000221"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:56.014859" elapsed="0.003273"/>
</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-10-06T01:23:55.375233" elapsed="0.643196"/>
</kw>
<msg time="2026-10-06T01:23:56.018619" 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-10-06T01:23:55.374608" elapsed="0.644181"/>
</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-10-06T01:23:55.374218" elapsed="0.644676"/>
</kw>
<msg time="2026-10-06T01:23:56.018945" 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-10-06T01:23:55.373767" elapsed="0.645239"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:56.019878" elapsed="0.000382"/>
</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-10-06T01:23:56.020509" elapsed="0.000308"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:56.021012" elapsed="0.000120"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:56.019382" elapsed="0.001814"/>
</kw>
<msg time="2026-10-06T01:23:56.021309" 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-10-06T01:23:55.372975" elapsed="0.648367"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:56.021985" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:56.021647" elapsed="0.000391"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-10-06T01:23:56.022108" elapsed="0.000038"/>
</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-10-06T01:23:55.372203" elapsed="0.650047"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:55.372044" elapsed="0.650251"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:56.023394" level="INFO">${member_ip} = 10.30.171.171</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-10-06T01:23:56.023103" elapsed="0.000325"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:56.024393" 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-10-06T01:23:56.024515" 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-10-06T01:23:56.024222" elapsed="0.000327"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:56.029418" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:56.028438" elapsed="0.001142"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:56.028375" elapsed="0.001340"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:56.030473" 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-10-06T01:23:56.030834" 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-10-06T01:23:56.030048" elapsed="0.000920"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:56.032065" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.171.171" 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-10-06T01:23:56.031294" elapsed="0.000942"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:56.033316" level="INFO">${conn_id} = 216</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-10-06T01:23:56.032555" elapsed="0.000892"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:23:56.034967" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:23:56.035038" 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-10-06T01:23:56.034704" elapsed="0.000357"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:56.035260" elapsed="0.000284"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:23:56.036498" level="INFO">Logging into '10.30.171.171:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:23:56.640510" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-194-generic x86_64)

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

 System information as of Tue Oct  6 01:23:56 UTC 2026

  System load:  0.2                Processes:             124
  Usage of /:   14.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.171
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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

New release '24.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:20:51 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-0-builder-1 ~]&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-10-06T01:23:56.036266" elapsed="0.604368"/>
</kw>
<msg time="2026-10-06T01:23:56.640717" 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-10-06T01:23:56.035898" elapsed="0.604890"/>
</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-10-06T01:23:56.033938" elapsed="0.607049"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:23:56.641813" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-10-06T01:23:56.654302" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-10-06T01:23:56.654590" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:23:56.654774" 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-10-06T01:23:56.641348" elapsed="0.013542"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:56.655173" elapsed="0.000548"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:56.656909" 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-10-06T01:23:56.656343" elapsed="0.000722"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:56.657500" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:56.657222" elapsed="0.000364"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:56.657174" elapsed="0.000492"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:23:56.658073" elapsed="0.000059"/>
</return>
<status status="PASS" start="2026-10-06T01:23:56.657829" elapsed="0.000349"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:56.657791" elapsed="0.000464"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:56.658340" elapsed="0.000015"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:56.659996" elapsed="0.000360"/>
</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-10-06T01:23:56.660710" elapsed="0.000211"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:56.661168" elapsed="0.000151"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:56.658907" elapsed="0.002483"/>
</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-10-06T01:23:56.027179" elapsed="0.634423"/>
</kw>
<msg time="2026-10-06T01:23:56.661760" 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-10-06T01:23:56.026299" elapsed="0.635512"/>
</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-10-06T01:23:56.025756" elapsed="0.636127"/>
</kw>
<msg time="2026-10-06T01:23:56.661921" 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-10-06T01:23:56.024798" elapsed="0.637165"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:56.662562" elapsed="0.000311"/>
</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-10-06T01:23:56.663055" elapsed="0.000129"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:56.663325" elapsed="0.000085"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:56.662233" elapsed="0.001222"/>
</kw>
<msg time="2026-10-06T01:23:56.663536" 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-10-06T01:23:56.023734" elapsed="0.639824"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:56.664075" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:56.663851" elapsed="0.000262"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-10-06T01:23:56.664150" elapsed="0.000026"/>
</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-10-06T01:23:56.022652" elapsed="0.641596"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:56.022413" elapsed="0.641867"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:56.665100" level="INFO">${member_ip} = 10.30.170.97</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-10-06T01:23:56.664886" elapsed="0.000238"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:56.665839" 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-10-06T01:23:56.665928" 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-10-06T01:23:56.665706" elapsed="0.000246"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:56.669122" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:56.668467" elapsed="0.000756"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:56.668425" elapsed="0.000875"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:56.670037" 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-10-06T01:23:56.670294" 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-10-06T01:23:56.669627" elapsed="0.000783"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:56.671302" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.170.97" 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-10-06T01:23:56.670757" elapsed="0.000698"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:56.672499" level="INFO">${conn_id} = 219</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-10-06T01:23:56.671791" elapsed="0.000841"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:23:56.674193" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:23:56.674264" 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-10-06T01:23:56.673932" elapsed="0.000354"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:56.674475" elapsed="0.000473"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:23:56.675841" level="INFO">Logging into '10.30.170.97:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:23:57.338567" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-194-generic x86_64)

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

 System information as of Tue Oct  6 01:23:56 UTC 2026

  System load:  0.12               Processes:             120
  Usage of /:   14.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.97
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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

New release '24.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:20:52 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-0-builder-2 ~]&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-10-06T01:23:56.675524" elapsed="0.663211"/>
</kw>
<msg time="2026-10-06T01:23:57.338822" 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-10-06T01:23:56.675156" elapsed="0.663754"/>
</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-10-06T01:23:56.673036" elapsed="0.666151"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:23:57.340376" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-10-06T01:23:57.352997" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-10-06T01:23:57.353401" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:23:57.353671" 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-10-06T01:23:57.339748" elapsed="0.014140"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:57.354307" elapsed="0.000798"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:57.358074" 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-10-06T01:23:57.356331" elapsed="0.002138"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:57.359536" elapsed="0.000095"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:57.358891" elapsed="0.000917"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:57.358780" elapsed="0.001218"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:23:57.360978" elapsed="0.000146"/>
</return>
<status status="PASS" start="2026-10-06T01:23:57.360313" elapsed="0.000918"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:57.360219" elapsed="0.001205"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:23:57.361661" elapsed="0.000122"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:57.365074" elapsed="0.000899"/>
</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-10-06T01:23:57.366645" elapsed="0.000513"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:57.367772" elapsed="0.000222"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:57.363103" elapsed="0.004995"/>
</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-10-06T01:23:56.667594" elapsed="0.700809"/>
</kw>
<msg time="2026-10-06T01:23:57.368606" 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-10-06T01:23:56.666982" elapsed="0.701720"/>
</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-10-06T01:23:56.666550" elapsed="0.702255"/>
</kw>
<msg time="2026-10-06T01:23:57.368855" 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-10-06T01:23:56.666102" elapsed="0.702873"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:57.369885" elapsed="0.000385"/>
</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-10-06T01:23:57.370520" elapsed="0.000230"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:57.370963" elapsed="0.000124"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:57.369355" elapsed="0.001797"/>
</kw>
<msg time="2026-10-06T01:23:57.371265" 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-10-06T01:23:56.665317" elapsed="0.705980"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:57.372010" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:57.371593" elapsed="0.000470"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-10-06T01:23:57.372116" elapsed="0.000037"/>
</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-10-06T01:23:56.664533" elapsed="0.707733"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:56.664370" elapsed="0.707947"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:55.371944" elapsed="2.000417"/>
</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-10-06T01:23:55.370020" elapsed="2.002414"/>
</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-10-06T01:23:57.372661" elapsed="0.000309"/>
</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-10-06T01:23:57.380481" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:57.380359" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:57.380334" elapsed="0.000236"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:57.381050" 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-10-06T01:23:57.381181" 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-10-06T01:23:57.380878" elapsed="0.000337"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:57.381835" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:57.381476" elapsed="0.000416"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:57.382455" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:57.382152" elapsed="0.000358"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:57.383486" 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-10-06T01:23:57.383244" elapsed="0.000391">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-10-06T01:23:57.383790" level="INFO">${status} = FAIL</msg>
<msg time="2026-10-06T01:23:57.383848" 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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:57.382757" elapsed="0.001120"/>
</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-10-06T01:23:57.384266" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:57.383971" elapsed="0.000386"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:57.383948" elapsed="0.000440"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:57.385295" level="INFO">${ip_address} = 10.30.171.109</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-10-06T01:23:57.385008" elapsed="0.000320"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-10-06T01:23:57.385387" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:23:57.385559" level="INFO">${odl_ip} = 10.30.171.109</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:57.384653" elapsed="0.000954"/>
</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-10-06T01:23:57.385868" elapsed="0.000441"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:57.386785" level="INFO">index=222
host=10.30.171.109
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-10-06T01:23:57.386958" level="INFO">${karaf_connection_object} = index=222
host=10.30.171.109
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_er...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-10-06T01:23:57.386615" 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-10-06T01:23:57.387215" elapsed="0.000327"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-10-06T01:23:57.388111" level="INFO">Logging into '10.30.171.109:8101' as 'karaf'.</msg>
<msg time="2026-10-06T01:23:57.623295" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</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="PASS" start="2026-10-06T01:23:57.387833" elapsed="0.235604"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:57.625190" elapsed="0.000321"/>
</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-10-06T01:23:57.625735" elapsed="0.000153"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:57.626040" 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-10-06T01:23:57.624524" elapsed="0.001658"/>
</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-10-06T01:23:57.623875" elapsed="0.002350"/>
</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="PASS" start="2026-10-06T01:23:57.380026" elapsed="0.246246"/>
</kw>
<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="PASS" start="2026-10-06T01:23:57.373944" elapsed="0.252373"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:57.373399" elapsed="0.252969"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:57.373207" elapsed="0.253211"/>
</iter>
<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-10-06T01:23:57.631794" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:57.631692" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:57.631649" elapsed="0.000220"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:57.632200" 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-10-06T01:23:57.632298" 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-10-06T01:23:57.632069" elapsed="0.000253"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:57.632808" level="INFO">{1: 222}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:57.632525" elapsed="0.000325"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:57.633275" level="INFO">2</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:57.633035" elapsed="0.000282"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:57.634050" level="FAIL">Dictionary does not contain key '2'.</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-10-06T01:23:57.633864" elapsed="0.000289">Dictionary does not contain key '2'.</status>
</kw>
<msg time="2026-10-06T01:23:57.634251" level="INFO">${status} = FAIL</msg>
<msg time="2026-10-06T01:23:57.634291" level="INFO">${old_connection_index} = Dictionary does not contain key '2'.</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:57.633477" elapsed="0.000835"/>
</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-10-06T01:23:57.634609" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:57.634380" elapsed="0.000367"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:57.634363" elapsed="0.000409"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:57.635409" level="INFO">${ip_address} = 10.30.171.171</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-10-06T01:23:57.635199" elapsed="0.000235"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-10-06T01:23:57.635477" elapsed="0.000030"/>
</return>
<msg time="2026-10-06T01:23:57.635620" level="INFO">${odl_ip} = 10.30.171.171</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:57.634956" elapsed="0.000688"/>
</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-10-06T01:23:57.635832" elapsed="0.000324"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:57.636470" level="INFO">index=224
host=10.30.171.171
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-10-06T01:23:57.636560" level="INFO">${karaf_connection_object} = index=224
host=10.30.171.171
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_er...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-10-06T01:23:57.636361" elapsed="0.000237"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<arg>${karaf_connection_object.index}</arg>
<doc>Adds the given `key_value_pairs` and/or `items` to the `dictionary`.</doc>
<status status="PASS" start="2026-10-06T01:23:57.636793" elapsed="0.000240"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-10-06T01:23:57.637412" level="INFO">Logging into '10.30.171.171:8101' as 'karaf'.</msg>
<msg time="2026-10-06T01:23:57.843366" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</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="PASS" start="2026-10-06T01:23:57.637214" elapsed="0.206271"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:57.844949" elapsed="0.000317"/>
</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-10-06T01:23:57.845452" elapsed="0.000168"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:57.845785" elapsed="0.000097"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:57.844491" elapsed="0.001439"/>
</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-10-06T01:23:57.843878" elapsed="0.002093"/>
</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="PASS" start="2026-10-06T01:23:57.631401" elapsed="0.214616"/>
</kw>
<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="PASS" start="2026-10-06T01:23:57.627131" elapsed="0.218930"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:57.626752" elapsed="0.219355"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:57.626541" elapsed="0.219602"/>
</iter>
<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-10-06T01:23:57.851251" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:57.851159" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:57.851136" elapsed="0.000185"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:57.851653" 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-10-06T01:23:57.851768" 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-10-06T01:23:57.851517" elapsed="0.000275"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:57.852269" level="INFO">{1: 222, 2: 224}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:57.852031" elapsed="0.000280"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:57.852746" level="INFO">3</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:57.852496" elapsed="0.000290"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:57.853459" level="FAIL">Dictionary does not contain key '3'.</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-10-06T01:23:57.853282" elapsed="0.000276">Dictionary does not contain key '3'.</status>
</kw>
<msg time="2026-10-06T01:23:57.853671" level="INFO">${status} = FAIL</msg>
<msg time="2026-10-06T01:23:57.853729" level="INFO">${old_connection_index} = Dictionary does not contain key '3'.</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:57.852939" elapsed="0.000811"/>
</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-10-06T01:23:57.854030" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:57.853819" elapsed="0.000277"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:57.853803" elapsed="0.000316"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:57.854776" level="INFO">${ip_address} = 10.30.170.97</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-10-06T01:23:57.854535" elapsed="0.000265"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-10-06T01:23:57.854843" elapsed="0.000030"/>
</return>
<msg time="2026-10-06T01:23:57.854970" level="INFO">${odl_ip} = 10.30.170.97</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-10-06T01:23:57.854295" elapsed="0.000698"/>
</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-10-06T01:23:57.855164" elapsed="0.000316"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:57.855831" level="INFO">index=226
host=10.30.170.97
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-10-06T01:23:57.855920" level="INFO">${karaf_connection_object} = index=226
host=10.30.170.97
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_err...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-10-06T01:23:57.855715" 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-10-06T01:23:57.856099" elapsed="0.000232"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-10-06T01:23:57.856736" level="INFO">Logging into '10.30.170.97:8101' as 'karaf'.</msg>
<msg time="2026-10-06T01:23:58.104604" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</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="PASS" start="2026-10-06T01:23:57.856511" elapsed="0.248235"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:58.106132" elapsed="0.000314"/>
</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-10-06T01:23:58.106737" elapsed="0.000162"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:58.107041" 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-10-06T01:23:58.105755" elapsed="0.001426"/>
</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-10-06T01:23:58.105111" elapsed="0.002111"/>
</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="PASS" start="2026-10-06T01:23:57.850912" elapsed="0.256357"/>
</kw>
<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="PASS" start="2026-10-06T01:23:57.846780" elapsed="0.260532"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:57.846379" elapsed="0.261037"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:57.846240" elapsed="0.261213"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="PASS" start="2026-10-06T01:23:57.373043" elapsed="0.734444"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-10-06T01:23:55.349801" elapsed="2.757746"/>
</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-10-06T01:23:58.108410" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:58.108318" elapsed="0.000137"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.108296" elapsed="0.000181"/>
</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-10-06T01:23:58.110411" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:58.110321" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.110305" elapsed="0.000168"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:58.111359" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:58.111026" elapsed="0.000358"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:58.111845" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:58.111534" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:58.111910" elapsed="0.000033"/>
</return>
<msg time="2026-10-06T01:23:58.112045" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:58.110705" elapsed="0.001363"/>
</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-10-06T01:23:58.114412" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:58.114325" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.114308" elapsed="0.000166"/>
</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-10-06T01:23:58.115526" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:58.115419" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.115403" elapsed="0.000291"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:58.116219" level="INFO">${karaf_connection_index} = 222</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-10-06T01:23:58.115843" elapsed="0.000415"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:58.116744" 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-10-06T01:23:58.116500" elapsed="0.000288"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:58.162398" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "r "k "s "p "a "c "e "/ "o "v "s "[78Cd "[A[78Cb</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:58.118498" elapsed="0.044065"/>
</kw>
<msg time="2026-10-06T01:23:58.162814" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:58.162883" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.117008" elapsed="0.045925"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:58.240079" level="INFO">"- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "o "v "s "d "b "/ "S "o "u "t "h "b "o "u "n "[78Cd "[A[78C_
 "C "l "u "s "t "e "r "/ "0 "2 "0 "_ "_ "S "o "u "t "h "b "o "u "n "d "_ "C "l "u "s "t "e "r "_ "E "x "t "e "n "s "i "o "n ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:58.164562" elapsed="0.075692"/>
</kw>
<msg time="2026-10-06T01:23:58.240396" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:58.240462" level="INFO">${message_wait} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.163204" elapsed="0.077308"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.240974" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:58.240709" elapsed="0.000403"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.240665" elapsed="0.000474"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:58.241896" level="INFO"> "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "o "v "s "d "b "/ "S "o "u "t "h "b "o "u "n "[78Cd "[A[78C_
 "C "l "u "s "t "e "r "/ "0 "2 "0 "_ "_ "S "o "u "t "h "b "o "u "n "d "_ "C "l "u "s "t "e "r "_ "E "x "t "e "n "s "i "o "n ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:58.241374" elapsed="0.000644"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.242379" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:58.242137" elapsed="0.000410"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.242118" elapsed="0.000454"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:58.242619" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:58.244642" elapsed="0.000300"/>
</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-10-06T01:23:58.245165" elapsed="0.000147"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:58.245493" 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-10-06T01:23:58.244003" elapsed="0.001770"/>
</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-10-06T01:23:58.242940" elapsed="0.002933"/>
</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="PASS" start="2026-10-06T01:23:58.115217" elapsed="0.130732"/>
</kw>
<msg time="2026-10-06T01:23:58.246033" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:58.246073" level="INFO">${message} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.114632" elapsed="0.131477"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:58.246263" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:58.246179" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.246162" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:23:58.246814" elapsed="0.000025"/>
</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-10-06T01:23:58.247180" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:58.247247" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:58.114093" elapsed="0.133239"/>
</kw>
<msg time="2026-10-06T01:23:58.247432" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:58.247473" level="INFO">${output} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.112407" elapsed="0.135101"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.247942" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:58.247723" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.247704" elapsed="0.000310"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:58.112268" elapsed="0.135767"/>
</iter>
<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-10-06T01:23:58.250366" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:58.250281" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.250264" elapsed="0.000163"/>
</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-10-06T01:23:58.251468" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:58.251364" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.251347" elapsed="0.000302"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:58.252176" level="INFO">${karaf_connection_index} = 224</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-10-06T01:23:58.251816" elapsed="0.000399"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:58.252692" 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-10-06T01:23:58.252451" elapsed="0.000347"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:58.297325" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "r "k "s "p "a "c "e "/ "o "v "s "[78Cd "[A[78Cb</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:58.254375" elapsed="0.043098"/>
</kw>
<msg time="2026-10-06T01:23:58.297630" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:58.297719" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.253056" elapsed="0.044715"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:58.358994" level="INFO">"- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "o "v "s "d "b "/ "S "o "u "t "h "b "o "u "n "[78Cd "[A[78C_
 "C "l "u "s "t "e "r "/ "0 "2 "0 "_ "_ "S "o "u "t "h "b "o "u "n "d "_ "C "l "u "s "t "e "r "_ "E "x "t "e "n "s "i "o "n ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:58.299324" elapsed="0.059840"/>
</kw>
<msg time="2026-10-06T01:23:58.359304" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:58.359370" level="INFO">${message_wait} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.298020" elapsed="0.061399"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.360008" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:58.359572" elapsed="0.000574"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.359553" elapsed="0.000618"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:58.362751" level="INFO"> "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "o "v "s "d "b "/ "S "o "u "t "h "b "o "u "n "[78Cd "[A[78C_
 "C "l "u "s "t "e "r "/ "0 "2 "0 "_ "_ "S "o "u "t "h "b "o "u "n "d "_ "C "l "u "s "t "e "r "_ "E "x "t "e "n "s "i "o "n ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:58.360351" elapsed="0.002530"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.363246" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:58.363001" elapsed="0.000382"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.362982" elapsed="0.000426"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:58.363439" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:58.365413" elapsed="0.000314"/>
</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-10-06T01:23:58.365954" elapsed="0.000138"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:58.366273" elapsed="0.000091"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:58.364792" elapsed="0.001674"/>
</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-10-06T01:23:58.363742" elapsed="0.002820"/>
</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="PASS" start="2026-10-06T01:23:58.251162" elapsed="0.115490"/>
</kw>
<msg time="2026-10-06T01:23:58.366777" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:58.366818" level="INFO">${message} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.250574" elapsed="0.116280"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:58.367009" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:58.366923" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.366906" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.367430" elapsed="0.000025"/>
</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-10-06T01:23:58.367816" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:58.367882" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:58.250044" elapsed="0.117953"/>
</kw>
<msg time="2026-10-06T01:23:58.368081" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:58.368120" level="INFO">${output} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.248288" elapsed="0.119884"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.368458" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:58.368241" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.368225" elapsed="0.000305"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:58.248150" elapsed="0.120401"/>
</iter>
<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-10-06T01:23:58.370913" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:58.370829" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.370812" elapsed="0.000163"/>
</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-10-06T01:23:58.372013" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:58.371909" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.371892" elapsed="0.000251"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:58.372651" level="INFO">${karaf_connection_index} = 226</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-10-06T01:23:58.372287" elapsed="0.000419"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:58.373146" 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-10-06T01:23:58.372941" elapsed="0.000243"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:58.416514" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "r "k "s "p "a "c "e "/ "o "v "s "[78Cd "[A[78Cb</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:58.374721" elapsed="0.041952"/>
</kw>
<msg time="2026-10-06T01:23:58.416834" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:58.416901" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.373402" elapsed="0.043549"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:58.504938" level="INFO">"- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "o "v "s "d "b "/ "S "o "u "t "h "b "o "u "n "[78Cd "[A[78C_
 "C "l "u "s "t "e "r "/ "0 "2 "0 "_ "_ "S "o "u "t "h "b "o "u "n "d "_ "C "l "u "s "t "e "r "_ "E "x "t "e "n "s "i "o "n ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:58.418508" elapsed="0.086604"/>
</kw>
<msg time="2026-10-06T01:23:58.505252" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:58.505318" level="INFO">${message_wait} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.417201" elapsed="0.088166"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.505818" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:58.505522" elapsed="0.000436"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.505502" elapsed="0.000481"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:58.506655" level="INFO"> "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "o "v "s "d "b "/ "S "o "u "t "h "b "o "u "n "[78Cd "[A[78C_
 "C "l "u "s "t "e "r "/ "0 "2 "0 "_ "_ "S "o "u "t "h "b "o "u "n "d "_ "C "l "u "s "t "e "r "_ "E "x "t "e "n "s "i "o "n ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:58.506164" elapsed="0.000639"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.507164" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:58.506921" elapsed="0.000379"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.506903" elapsed="0.000422"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:58.507356" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:58.509483" 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-10-06T01:23:58.510064" elapsed="0.000140"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:58.510387" elapsed="0.000092"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:58.508670" elapsed="0.001912"/>
</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-10-06T01:23:58.507635" elapsed="0.003131"/>
</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="PASS" start="2026-10-06T01:23:58.371706" elapsed="0.139138"/>
</kw>
<msg time="2026-10-06T01:23:58.510927" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:58.510967" level="INFO">${message} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.371123" elapsed="0.139879"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:58.511156" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:23:58.511072" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.511055" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.511582" elapsed="0.000046"/>
</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-10-06T01:23:58.512056" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:58.512121" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:23:58.370564" elapsed="0.141643"/>
</kw>
<msg time="2026-10-06T01:23:58.512290" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:58.512330" level="INFO">${output} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.368910" elapsed="0.143455"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.512663" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:58.512432" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.512416" elapsed="0.000336"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:58.368669" elapsed="0.144104"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:58.112122" elapsed="0.400678"/>
</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-10-06T01:23:58.110094" elapsed="0.402757"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-10-06T01:23:58.108136" elapsed="0.404763"/>
</kw>
<arg>KarafKeywords.Log_Test_Suite_Start_To_Controller_Karaf</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.107728" elapsed="0.405208"/>
</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-10-06T01:23:55.347421" elapsed="3.165559"/>
</kw>
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-10-06T01:23:58.513812" level="INFO">${already_done} = True</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-10-06T01:23:58.513478" elapsed="0.000359"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="PASS" start="2026-10-06T01:23:58.513974" elapsed="0.000023"/>
</return>
<status status="PASS" start="2026-10-06T01:23:58.513902" elapsed="0.000122"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.513885" elapsed="0.000161"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.514221" elapsed="0.000020"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<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="NOT RUN" start="2026-10-06T01:23:58.514388" elapsed="0.000019"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<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 errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.514553" elapsed="0.000019"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<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="NOT RUN" start="2026-10-06T01:23:58.514768" elapsed="0.000020"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<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="NOT RUN" start="2026-10-06T01:23:58.515003" elapsed="0.000023"/>
</kw>
<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-10-06T01:23:58.513214" elapsed="0.001900"/>
</kw>
<status status="PASS" start="2026-10-06T01:23:55.347170" elapsed="3.167989"/>
</kw>
<test id="s1-s1-s2-t1" name="Check Shards Status Before Fail" line="17">
<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-10-06T01:23:58.516434" elapsed="0.000214"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:23:58.516191" elapsed="0.000529"/>
</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-10-06T01:23:58.517590" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:58.517506" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.517489" elapsed="0.000181"/>
</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-10-06T01:23:58.519756" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:58.519655" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.519638" elapsed="0.000180"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:58.520726" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:58.520373" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:58.521177" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:58.520906" elapsed="0.000295"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:58.521241" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:23:58.521366" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:58.520020" elapsed="0.001369"/>
</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-10-06T01:23:58.523829" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:58.523743" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.523725" elapsed="0.000167"/>
</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-10-06T01:23:58.525036" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:58.524951" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.524920" elapsed="0.000178"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:58.525463" level="INFO">${karaf_connection_index} = 222</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-10-06T01:23:58.525240" elapsed="0.000249"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:58.525851" 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-10-06T01:23:58.525662" elapsed="0.000213"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:58.564618" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:58.526444" elapsed="0.038374"/>
</kw>
<msg time="2026-10-06T01:23:58.564976" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:58.565017" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.526033" elapsed="0.039021"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:58.635241" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CB
 "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:58.565786" elapsed="0.069634"/>
</kw>
<msg time="2026-10-06T01:23:58.635577" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:58.635636" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.565218" elapsed="0.070455"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.635995" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:58.635769" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.635748" elapsed="0.000345"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:58.636627" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CB
 "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:58.636276" elapsed="0.000490"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.637029" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:58.636830" elapsed="0.000277"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.636813" elapsed="0.000316"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:58.637160" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:58.639707" elapsed="0.000480"/>
</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-10-06T01:23:58.641428" elapsed="0.000644"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:58.643290" elapsed="0.000333"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:58.637993" elapsed="0.005887"/>
</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-10-06T01:23:58.637431" elapsed="0.006571"/>
</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="PASS" start="2026-10-06T01:23:58.524653" elapsed="0.119426"/>
</kw>
<msg time="2026-10-06T01:23:58.644163" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:58.644203" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.524039" elapsed="0.120200"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:58.644395" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:23:58.644310" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.644292" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:23:58.644831" elapsed="0.000024"/>
</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-10-06T01:23:58.645131" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:58.645196" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:58.523420" elapsed="0.121861"/>
</kw>
<msg time="2026-10-06T01:23:58.645365" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:58.645405" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.521755" elapsed="0.123686"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.645878" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:58.645509" elapsed="0.000421"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.645492" elapsed="0.000460"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:58.521580" elapsed="0.124393"/>
</iter>
<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-10-06T01:23:58.648329" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:58.648244" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.648227" elapsed="0.000164"/>
</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-10-06T01:23:58.649485" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:58.649402" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.649385" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:58.649955" level="INFO">${karaf_connection_index} = 224</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-10-06T01:23:58.649730" elapsed="0.000249"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:58.650309" 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-10-06T01:23:58.650139" elapsed="0.000194"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:58.684907" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:58.650986" elapsed="0.034107"/>
</kw>
<msg time="2026-10-06T01:23:58.685250" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:58.685292" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.650482" elapsed="0.034846"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:58.752988" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CB
 "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:58.685951" elapsed="0.067257"/>
</kw>
<msg time="2026-10-06T01:23:58.753392" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:58.753435" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.685490" elapsed="0.067981"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.753863" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:58.753561" elapsed="0.000377"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.753536" elapsed="0.000428"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:58.754523" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CB
 "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:58.754148" elapsed="0.000473"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.754902" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:58.754700" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.754667" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:58.755027" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:58.757613" elapsed="0.000519"/>
</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-10-06T01:23:58.759361" elapsed="0.000499"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:58.761037" elapsed="0.000493"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:58.755888" elapsed="0.005727"/>
</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-10-06T01:23:58.755327" elapsed="0.006677"/>
</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="PASS" start="2026-10-06T01:23:58.649146" elapsed="0.112935"/>
</kw>
<msg time="2026-10-06T01:23:58.762164" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:58.762204" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.648536" elapsed="0.113704"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:58.762396" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:58.762310" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.762293" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.762831" elapsed="0.000024"/>
</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-10-06T01:23:58.763131" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:58.763194" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:23:58.647955" elapsed="0.115325"/>
</kw>
<msg time="2026-10-06T01:23:58.763364" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:58.763404" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.646221" elapsed="0.117263"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.763857" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:58.763554" elapsed="0.000354"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.763538" elapsed="0.000393"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:58.646085" elapsed="0.117867"/>
</iter>
<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-10-06T01:23:58.766357" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:58.766271" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.766254" elapsed="0.000165"/>
</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-10-06T01:23:58.767514" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:58.767429" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.767412" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:58.767989" level="INFO">${karaf_connection_index} = 226</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-10-06T01:23:58.767756" elapsed="0.000258"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:58.768346" 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-10-06T01:23:58.768174" elapsed="0.000196"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:58.807477" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:58.768975" elapsed="0.038859"/>
</kw>
<msg time="2026-10-06T01:23:58.807995" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:58.808037" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.768523" elapsed="0.039550"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:58.874335" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CB
 "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:58.808698" elapsed="0.065815"/>
</kw>
<msg time="2026-10-06T01:23:58.874704" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:58.874747" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.808238" elapsed="0.066544"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.875055" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:58.874853" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.874834" elapsed="0.000315"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:58.875694" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CB
 "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:58.875328" elapsed="0.000451"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.876041" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:58.875845" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.875828" elapsed="0.000304"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:58.876162" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:58.878581" elapsed="0.000506"/>
</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-10-06T01:23:58.880294" elapsed="0.000485"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:58.882134" elapsed="0.000440"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:58.876955" elapsed="0.005701"/>
</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-10-06T01:23:58.876429" elapsed="0.006397"/>
</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="PASS" start="2026-10-06T01:23:58.767171" elapsed="0.115733"/>
</kw>
<msg time="2026-10-06T01:23:58.882986" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:58.883025" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.766565" elapsed="0.116496"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:58.883218" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:58.883131" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.883114" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.883627" elapsed="0.000025"/>
</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-10-06T01:23:58.884017" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:58.884083" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:58.765975" elapsed="0.118192"/>
</kw>
<msg time="2026-10-06T01:23:58.884249" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:58.884288" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.764206" elapsed="0.120118"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.884624" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:58.884390" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.884375" elapsed="0.000338"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:58.764068" elapsed="0.120667"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:58.521439" elapsed="0.363323"/>
</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-10-06T01:23:58.519344" elapsed="0.365476"/>
</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-10-06T01:23:58.517253" elapsed="0.367624"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.516866" elapsed="0.368056"/>
</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-10-06T01:23:58.515851" elapsed="0.369122"/>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:23:58.892873" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:23:58.892587" elapsed="0.000322">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:58.892179" elapsed="0.000844">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:23:58.893081" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:23:58.889197" elapsed="0.003927"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:23:58.888791" elapsed="0.004416">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.893433" elapsed="0.000021"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.893669" elapsed="0.000036"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:58.893897" elapsed="0.000022"/>
</kw>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:58.885192" elapsed="0.008845">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:23:58.515230" elapsed="0.378938">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</test>
<test id="s1-s1-s2-t2" name="Start OVS Multiple Connections" line="21">
<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-10-06T01:23:58.895614" elapsed="0.000219"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:23:58.895352" elapsed="0.000530"/>
</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-10-06T01:23:58.896978" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:58.896700" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.896666" elapsed="0.000379"/>
</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-10-06T01:23:58.898942" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:58.898858" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.898841" elapsed="0.000164"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:58.899942" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:58.899576" elapsed="0.000392"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:58.900391" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:58.900118" elapsed="0.000298"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:58.900456" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:23:58.900582" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:23:58.899208" elapsed="0.001413"/>
</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-10-06T01:23:58.903100" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:58.903016" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.902998" elapsed="0.000165"/>
</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-10-06T01:23:58.904248" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:58.904163" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:58.904146" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:58.904713" level="INFO">${karaf_connection_index} = 222</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-10-06T01:23:58.904450" elapsed="0.000289"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:58.905070" 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-10-06T01:23:58.904899" elapsed="0.000196"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:58.940555" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:58.905668" elapsed="0.035104"/>
</kw>
<msg time="2026-10-06T01:23:58.940929" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:58.940970" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.905246" elapsed="0.035760"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:59.007630" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "S "t "a "r "t "[C "O "V "S "[C "M "u "l "t "i "p "l "e "[C "[78CC "[A[78Co
 "n "n "e "c "t "i "o "n "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:58.941586" elapsed="0.066247"/>
</kw>
<msg time="2026-10-06T01:23:59.007993" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:59.008034" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.941167" elapsed="0.066903"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:59.008354" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:59.008143" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:59.008123" elapsed="0.000365"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:59.009057" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "S "t "a "r "t "[C "O "V "S "[C "M "u "l "t "i "p "l "e "[C "[78CC "[A[78Co
 "n "n "e "c "t "i "o "n "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:59.008703" elapsed="0.000437"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:59.009401" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:59.009202" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:59.009185" elapsed="0.000310"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:59.009526" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:59.012062" elapsed="0.000664"/>
</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-10-06T01:23:59.013955" elapsed="0.000462"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:59.015725" elapsed="0.000421"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:59.010328" elapsed="0.005889"/>
</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-10-06T01:23:59.009832" elapsed="0.006502"/>
</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="PASS" start="2026-10-06T01:23:58.903906" elapsed="0.112505"/>
</kw>
<msg time="2026-10-06T01:23:59.016493" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:59.016532" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.903309" elapsed="0.113259"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:59.016982" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:59.016663" elapsed="0.000375"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:59.016637" elapsed="0.000423"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:23:59.017380" elapsed="0.000024"/>
</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-10-06T01:23:59.017716" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:59.017780" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:23:58.902671" elapsed="0.115200"/>
</kw>
<msg time="2026-10-06T01:23:59.017954" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:59.017993" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.900975" elapsed="0.117054"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:59.018312" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:59.018096" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:59.018080" elapsed="0.000303"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:23:58.900838" elapsed="0.117566"/>
</iter>
<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-10-06T01:23:59.020810" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:59.020722" elapsed="0.000132"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:59.020704" elapsed="0.000171"/>
</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-10-06T01:23:59.021964" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:59.021878" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:59.021861" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:59.022392" level="INFO">${karaf_connection_index} = 224</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-10-06T01:23:59.022168" elapsed="0.000249"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:59.022822" 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-10-06T01:23:59.022576" elapsed="0.000270"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:59.063522" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:59.023413" elapsed="0.040382"/>
</kw>
<msg time="2026-10-06T01:23:59.063954" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:59.063996" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:59.023002" elapsed="0.041030"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:59.140519" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "S "t "a "r "t "[C "O "V "S "[C "M "u "l "t "i "p "l "e "[C "[78CC "[A[78Co
 "n "n "e "c "t "i "o "n "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:59.064626" elapsed="0.076101"/>
</kw>
<msg time="2026-10-06T01:23:59.140885" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:59.140926" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:59.064195" elapsed="0.076768"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:59.141237" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:59.141033" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:59.141015" elapsed="0.000315"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:59.141881" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "S "t "a "r "t "[C "O "V "S "[C "M "u "l "t "i "p "l "e "[C "[78CC "[A[78Co
 "n "n "e "c "t "i "o "n "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:59.141513" elapsed="0.000448"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:59.142219" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:59.142022" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:59.142005" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:59.142341" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:59.144778" elapsed="0.000472"/>
</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-10-06T01:23:59.146449" elapsed="0.000617"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:59.148233" elapsed="0.000307"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:59.143131" elapsed="0.005489"/>
</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-10-06T01:23:59.142617" elapsed="0.006161"/>
</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="PASS" start="2026-10-06T01:23:59.021584" elapsed="0.127270"/>
</kw>
<msg time="2026-10-06T01:23:59.148934" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:59.148973" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:59.021020" elapsed="0.127989"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:59.149161" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:23:59.149077" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:59.149061" elapsed="0.000176"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:59.149544" elapsed="0.000024"/>
</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-10-06T01:23:59.150091" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:59.150157" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:23:59.020397" elapsed="0.129844"/>
</kw>
<msg time="2026-10-06T01:23:59.150361" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:59.150401" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:59.018668" elapsed="0.131768"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:59.150750" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:59.150504" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:59.150488" elapsed="0.000338"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:23:59.018515" elapsed="0.132334"/>
</iter>
<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-10-06T01:23:59.153249" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:59.153164" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:59.153147" elapsed="0.000165"/>
</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-10-06T01:23:59.154408" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:23:59.154323" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:59.154307" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:23:59.154871" level="INFO">${karaf_connection_index} = 226</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-10-06T01:23:59.154624" elapsed="0.000272"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:59.155223" 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-10-06T01:23:59.155054" elapsed="0.000193"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:23:59.189722" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:23:59.155839" elapsed="0.034058"/>
</kw>
<msg time="2026-10-06T01:23:59.190052" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:23:59.190093" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:59.155398" elapsed="0.034730"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:23:59.252265" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "S "t "a "r "t "[C "O "V "S "[C "M "u "l "t "i "p "l "e "[C "[78CC "[A[78Co
 "n "n "e "c "t "i "o "n "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:23:59.190759" elapsed="0.061683"/>
</kw>
<msg time="2026-10-06T01:23:59.252598" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:23:59.252653" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:59.190289" elapsed="0.062422"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:59.252985" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:59.252782" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:59.252763" elapsed="0.000315"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:59.253591" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "S "t "a "r "t "[C "O "V "S "[C "M "u "l "t "i "p "l "e "[C "[78CC "[A[78Co
 "n "n "e "c "t "i "o "n "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:23:59.253256" elapsed="0.000448"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:59.253962" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:59.253766" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:59.253749" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:23:59.254084" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:59.256659" elapsed="0.000496"/>
</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-10-06T01:23:59.258384" elapsed="0.000496"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:23:59.260315" elapsed="0.000490"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:23:59.254939" elapsed="0.005935"/>
</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-10-06T01:23:59.254343" elapsed="0.006648"/>
</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="PASS" start="2026-10-06T01:23:59.154066" elapsed="0.107003"/>
</kw>
<msg time="2026-10-06T01:23:59.261150" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:59.261190" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:59.153455" elapsed="0.107771"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:23:59.261382" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:23:59.261296" elapsed="0.000232"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:59.261279" elapsed="0.000275"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:59.261962" elapsed="0.000025"/>
</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-10-06T01:23:59.262259" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:23:59.262323" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:23:59.152876" elapsed="0.109532"/>
</kw>
<msg time="2026-10-06T01:23:59.262491" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:23:59.262530" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:59.151091" elapsed="0.111475"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:59.262881" elapsed="0.000018"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:59.262648" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:59.262632" elapsed="0.000320"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:23:59.150956" elapsed="0.112016"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:23:58.900687" elapsed="0.362312"/>
</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-10-06T01:23:58.898528" elapsed="0.364521"/>
</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-10-06T01:23:58.896411" elapsed="0.366690"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:23:58.896026" elapsed="0.367115"/>
</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-10-06T01:23:58.895013" elapsed="0.368176"/>
</kw>
<kw name="Add Multiple Managers to OVS" owner="OVSDB">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:23:59.265890" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:23:59.265492" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:23:59.266334" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:23:59.266063" elapsed="0.000295"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:23:59.266397" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:23:59.266521" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${controller_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-10-06T01:23:59.265140" elapsed="0.001404"/>
</kw>
<kw name="Clean Mininet System" owner="Utils">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:23:59.268711" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:23:59.268444" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-10-06T01:23:59.268425" elapsed="0.000362"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:59.269110" 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-10-06T01:23:59.269237" 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-10-06T01:23:59.268980" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:23:59.269766" level="INFO">Attempting to execute command "sudo mn -c" on remote system "10.30.170.234" 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-10-06T01:23:59.269449" elapsed="0.000360"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:23:59.270287" level="INFO">${conn_id} = 237</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-10-06T01:23:59.269985" elapsed="0.000327"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:23:59.271161" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:23:59.271231" 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-10-06T01:23:59.270896" elapsed="0.000357"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:23:59.271400" elapsed="0.000472"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:23:59.272657" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:23:59.624408" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:23:30 UTC 2026

  System load:  0.17               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:23:54 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:23:59.272404" elapsed="0.352142"/>
</kw>
<msg time="2026-10-06T01:23:59.624633" 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-10-06T01:23:59.272037" elapsed="0.352701"/>
</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-10-06T01:23:59.270508" elapsed="0.354342"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:23:59.625369" level="INFO">Executing command 'sudo mn -c'.</msg>
<msg time="2026-10-06T01:24:00.773508" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:24:00.773930" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:24:00.774024" level="INFO">${stderr} = *** Removing excess controllers/ofprotocols/ofdatapaths/pings/noxes
killall controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec iv...</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-10-06T01:23:59.625123" elapsed="1.148955"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:00.774560" elapsed="0.000611"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:00.776330" level="INFO">*** Removing excess controllers/ofprotocols/ofdatapaths/pings/noxes
killall controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec ivs ryu-manager 2&gt; /dev/null
killall -9 controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec ivs ryu-manager 2&gt; /dev/null
pkill -9 -f "sudo mnexec"
*** Removing junk from /tmp
rm -f /tmp/vconn* /tmp/vlogs* /tmp/*.out /tmp/*.log
*** Removing old X11 tunnels
*** Removing excess kernel datapaths
ps ax | egrep -o 'dp[0-9]+' | sed 's/dp/nl:/'
***  Removing OVS datapaths
ovs-vsctl --timeout=1 list-br
ovs-vsctl --timeout=1 list-br
*** Removing all links of the pattern foo-ethX
ip link show | egrep -o '([-_.[:alnum:]]+-eth[[:digit:]]+)'
ip link show
*** Killing stale mininet node processes
pkill -9 -f mininet:
*** Shutting down stale tunnels
pkill -9 -f Tunnel=Ethernet
pkill -9 -f .ssh/mn
rm -f ~/.ssh/mn/*
*** Cleanup complete.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:00.775729" elapsed="0.000715"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:24:00.776915" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:00.776612" elapsed="0.000405"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:00.776562" elapsed="0.000503"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:24:00.777351" elapsed="0.000063"/>
</return>
<status status="PASS" start="2026-10-06T01:24:00.777173" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:00.777142" elapsed="0.000389"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:24:00.777599" elapsed="0.000052"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:00.779271" elapsed="0.000688"/>
</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-10-06T01:24:00.780478" elapsed="0.000380"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:00.781176" elapsed="0.000277"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:00.778315" elapsed="0.003253"/>
</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-10-06T01:23:59.268028" elapsed="1.513748"/>
</kw>
<msg time="2026-10-06T01:24:00.781885" 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-10-06T01:23:59.267480" elapsed="1.514511"/>
</kw>
<arg>${system}</arg>
<arg>sudo mn -c</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:23:59.267074" elapsed="1.515074"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:00.786340" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:00.785767" elapsed="0.000690"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:00.785725" elapsed="0.000782"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:00.787252" 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-10-06T01:24:00.787456" 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-10-06T01:24:00.786975" elapsed="0.000535"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:00.788665" level="INFO">Attempting to execute command "sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh" on remote system "10.30.170.234" 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-10-06T01:24:00.788000" elapsed="0.000791"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:00.789887" level="INFO">${conn_id} = 239</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-10-06T01:24:00.789178" elapsed="0.000764"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:24:00.792384" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:24:00.792538" 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-10-06T01:24:00.791817" elapsed="0.000771"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:00.792972" elapsed="0.000630"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:24:00.795397" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:24:01.184494" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:23:30 UTC 2026

  System load:  0.17               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:23:59 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:24:00.794882" elapsed="0.389907"/>
</kw>
<msg time="2026-10-06T01:24:01.184950" 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-10-06T01:24:00.794018" elapsed="0.391077"/>
</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-10-06T01:24:00.790367" elapsed="0.394939"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:24:01.186360" level="INFO">Executing command 'sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh'.</msg>
<msg time="2026-10-06T01:24:01.229464" level="INFO">Command exited with return code -1.</msg>
<msg time="2026-10-06T01:24:01.229755" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:24:01.229845" level="INFO">${stderr} = </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-10-06T01:24:01.185902" elapsed="0.043990"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:01.230340" elapsed="0.000457"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:01.231945" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:01.231303" elapsed="0.000730"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:24:01.232448" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:01.232202" elapsed="0.000349"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:01.232150" elapsed="0.000452"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:24:01.232952" elapsed="0.000053"/>
</return>
<status status="PASS" start="2026-10-06T01:24:01.232767" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:01.232734" elapsed="0.000389"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:24:01.233189" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:01.234890" elapsed="0.000643"/>
</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-10-06T01:24:01.235998" elapsed="0.000318"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:01.236645" elapsed="0.000226"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:01.233917" elapsed="0.003059"/>
</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-10-06T01:24:00.784734" elapsed="0.452397"/>
</kw>
<msg time="2026-10-06T01:24:01.237235" 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-10-06T01:24:00.783484" elapsed="0.453851"/>
</kw>
<arg>${system}</arg>
<arg>sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:24:00.782494" elapsed="0.455001"/>
</kw>
<arg>${tools_system}</arg>
<status status="PASS" start="2026-10-06T01:23:59.266757" elapsed="1.970849"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:01.238511" level="INFO">${ovs_opt} = </msg>
<var>${ovs_opt}</var>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:01.237988" elapsed="0.000576"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Catenate" owner="BuiltIn">
<msg time="2026-10-06T01:24:01.240106" level="INFO">${ovs_opt} =   tcp:10.30.171.109:6640</msg>
<var>${ovs_opt}</var>
<arg>${ovs_opt}</arg>
<arg>${SPACE}tcp:${ODL_SYSTEM_${index}_IP}:${ovs_mgr_port}</arg>
<doc>Concatenates the given items together and returns the resulted string.</doc>
<status status="PASS" start="2026-10-06T01:24:01.239317" elapsed="0.000844"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:01.241123" level="INFO">  tcp:10.30.171.109:6640</msg>
<arg>${ovs_opt}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:01.240587" elapsed="0.000625"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:01.239003" elapsed="0.002275"/>
</iter>
<iter>
<kw name="Catenate" owner="BuiltIn">
<msg time="2026-10-06T01:24:01.242523" level="INFO">${ovs_opt} =   tcp:10.30.171.109:6640  tcp:10.30.171.171:6640</msg>
<var>${ovs_opt}</var>
<arg>${ovs_opt}</arg>
<arg>${SPACE}tcp:${ODL_SYSTEM_${index}_IP}:${ovs_mgr_port}</arg>
<doc>Concatenates the given items together and returns the resulted string.</doc>
<status status="PASS" start="2026-10-06T01:24:01.241813" elapsed="0.000764"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:01.243524" level="INFO">  tcp:10.30.171.109:6640  tcp:10.30.171.171:6640</msg>
<arg>${ovs_opt}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:01.243048" elapsed="0.000563"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:01.241458" elapsed="0.002269"/>
</iter>
<iter>
<kw name="Catenate" owner="BuiltIn">
<msg time="2026-10-06T01:24:01.245039" level="INFO">${ovs_opt} =   tcp:10.30.171.109:6640  tcp:10.30.171.171:6640  tcp:10.30.170.97:6640</msg>
<var>${ovs_opt}</var>
<arg>${ovs_opt}</arg>
<arg>${SPACE}tcp:${ODL_SYSTEM_${index}_IP}:${ovs_mgr_port}</arg>
<doc>Concatenates the given items together and returns the resulted string.</doc>
<status status="PASS" start="2026-10-06T01:24:01.244265" elapsed="0.000828"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:01.246043" level="INFO">  tcp:10.30.171.109:6640  tcp:10.30.171.171:6640  tcp:10.30.170.97:6640</msg>
<arg>${ovs_opt}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:01.245511" elapsed="0.000622"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:01.243915" elapsed="0.002284"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:01.238726" elapsed="0.007532"/>
</for>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:01.253801" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:01.253170" elapsed="0.000751"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:01.253129" elapsed="0.000843"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:01.254726" 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-10-06T01:24:01.254948" 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-10-06T01:24:01.254393" elapsed="0.000701"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:01.256214" level="INFO">Attempting to execute command "sudo ovs-vsctl set-manager   tcp:10.30.171.109:6640  tcp:10.30.171.171:6640  tcp:10.30.170.97:6640" on remote system "10.30.170.234" 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-10-06T01:24:01.255519" elapsed="0.000792"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:01.257430" level="INFO">${conn_id} = 241</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-10-06T01:24:01.256760" elapsed="0.000732"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:24:01.259423" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:24:01.259576" 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-10-06T01:24:01.258835" elapsed="0.000812"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:01.260029" elapsed="0.000687"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:24:01.262437" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:24:01.631028" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:23:30 UTC 2026

  System load:  0.17               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:24:01 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:24:01.261926" elapsed="0.369182"/>
</kw>
<msg time="2026-10-06T01:24:01.631162" 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-10-06T01:24:01.261076" elapsed="0.370142"/>
</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-10-06T01:24:01.257994" elapsed="0.373302"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:24:01.631657" level="INFO">Executing command 'sudo ovs-vsctl set-manager   tcp:10.30.171.109:6640  tcp:10.30.171.171:6640  tcp:10.30.170.97:6640'.</msg>
<msg time="2026-10-06T01:24:01.674743" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:24:01.674962" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:24:01.675048" level="INFO">${stderr} = </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-10-06T01:24:01.631497" elapsed="0.043598"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:01.675434" elapsed="0.000464"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:01.676924" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:01.676353" elapsed="0.000657"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:24:01.677361" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:01.677153" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:01.677112" elapsed="0.000389"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:24:01.677843" elapsed="0.000053"/>
</return>
<status status="PASS" start="2026-10-06T01:24:01.677606" elapsed="0.000358"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:01.677576" elapsed="0.000438"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:24:01.678082" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:01.679607" elapsed="0.000672"/>
</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-10-06T01:24:01.680735" elapsed="0.000613"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:01.681719" elapsed="0.000204"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:01.678750" elapsed="0.003280"/>
</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-10-06T01:24:01.252134" elapsed="0.430080"/>
</kw>
<msg time="2026-10-06T01:24:01.682316" 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-10-06T01:24:01.247704" elapsed="0.434781"/>
</kw>
<arg>${tools_system}</arg>
<arg>sudo ovs-vsctl set-manager ${ovs_opt}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:24:01.246669" elapsed="0.435995"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify OVS Reports Connected" owner="OVSDB">
<kw name="Verify Ovs-vsctl Output" owner="OVSDB">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:01.695220" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:01.694646" elapsed="0.000692"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:01.694584" elapsed="0.000804"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:01.696129" 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-10-06T01:24:01.696330" 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-10-06T01:24:01.695863" elapsed="0.000520"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:01.697493" level="INFO">Attempting to execute command "sudo ovs-vsctl show" on remote system "10.30.170.234" 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-10-06T01:24:01.696851" elapsed="0.000736"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:01.698730" level="INFO">${conn_id} = 243</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-10-06T01:24:01.698028" elapsed="0.000760"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:24:01.700050" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:24:01.700146" 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-10-06T01:24:01.699706" elapsed="0.000470"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:01.700382" elapsed="0.000427"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:24:01.702134" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:24:02.102596" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:23:30 UTC 2026

  System load:  0.17               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:24:01 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:24:01.701535" elapsed="0.401253"/>
</kw>
<msg time="2026-10-06T01:24:02.102862" 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-10-06T01:24:01.701032" elapsed="0.401907"/>
</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-10-06T01:24:01.699185" elapsed="0.403853"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:24:02.103500" level="INFO">Executing command 'sudo ovs-vsctl show'.</msg>
<msg time="2026-10-06T01:24:02.126367" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:24:02.126516" level="INFO">${stdout} = 481d36a1-9b9f-4abe-9347-ba3329161944
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.171.109:6640"
    Manager "tcp:10.30.170.97:6640"
    ovs_version: "2.17.11"</msg>
<msg time="2026-10-06T01:24:02.126572" level="INFO">${stderr} = </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-10-06T01:24:02.103294" elapsed="0.023307"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:02.126880" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:02.127901" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:02.127482" elapsed="0.000472"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:24:02.128215" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:02.128061" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:02.128027" elapsed="0.000285"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:24:02.128497" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:24:02.128381" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:02.128362" elapsed="0.000244"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:24:02.128752" elapsed="0.000024"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:02.129801" 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-10-06T01:24:02.130458" elapsed="0.000237"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:02.130893" elapsed="0.000123"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:02.129179" elapsed="0.001903"/>
</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-10-06T01:24:01.693660" elapsed="0.437519"/>
</kw>
<msg time="2026-10-06T01:24:02.131247" 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-10-06T01:24:01.692457" elapsed="0.438865"/>
</kw>
<msg time="2026-10-06T01:24:02.131472" level="INFO">${output} = 481d36a1-9b9f-4abe-9347-ba3329161944
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.171.109:6640"
    Manager "tcp:10.30.170.97:6640"
    ovs_version: "2.17.11"</msg>
<var>${output}</var>
<arg>${ovs_system}</arg>
<arg>sudo ovs-vsctl ${vsctl_args}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:24:01.691443" elapsed="0.440064"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:02.132116" level="INFO">481d36a1-9b9f-4abe-9347-ba3329161944
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.171.109:6640"
    Manager "tcp:10.30.170.97:6640"
    ovs_version: "2.17.11"</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:02.131805" elapsed="0.000368"/>
</kw>
<if>
<branch type="IF" condition="&quot;${should_match}&quot; == &quot;True&quot;">
<kw name="Should Contain" owner="BuiltIn">
<msg time="2026-10-06T01:24:02.133053" level="FAIL">'481d36a1-9b9f-4abe-9347-ba3329161944
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.171.109:6640"
    Manager "tcp:10.30.170.97:6640"
    ovs_version: "2.17.11"' does not contain 'is_connected'</msg>
<arg>${output}</arg>
<arg>${expected_output}</arg>
<doc>Fails if the `container` does not contain the `item` one or more times.</doc>
<status status="FAIL" start="2026-10-06T01:24:02.132545" elapsed="0.000612">'481d36a1-9b9f-4abe-9347-ba3329161944
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.171.109:6640"
    Manager "tcp:10.30.170.97:6640"
    ovs_version: "2.17.11"' does not contain 'is_connected'</status>
</kw>
<status status="FAIL" start="2026-10-06T01:24:02.132259" elapsed="0.000993">'481d36a1-9b9f-4abe-9347-ba3329161944
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.171.109:6640"
    Manager "tcp:10.30.170.97:6640"
    ovs_version: "2.17.11"' does not contain 'is_connected'</status>
</branch>
<status status="FAIL" start="2026-10-06T01:24:02.132235" elapsed="0.001061">'481d36a1-9b9f-4abe-9347-ba3329161944
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.171.109:6640"
    Manager "tcp:10.30.170.97:6640"
    ovs_version: "2.17.11"' does not contain 'is_connected'</status>
</if>
<if>
<branch type="IF" condition="&quot;${should_match}&quot; == &quot;False&quot;">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${output}</arg>
<arg>${expected_output}</arg>
<doc>Fails if the `container` contains the `item`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:02.133599" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:02.133386" elapsed="0.000317"/>
</branch>
<status status="NOT RUN" start="2026-10-06T01:24:02.133363" elapsed="0.000373"/>
</if>
<return>
<value>${output}</value>
<status status="NOT RUN" start="2026-10-06T01:24:02.133779" elapsed="0.000019"/>
</return>
<var>${output}</var>
<arg>show</arg>
<arg>is_connected</arg>
<arg>${tools_system}</arg>
<doc>A wrapper keyword to make it easier to validate ovs-vsctl output, and gives an easy
way to check this output in a WUKS. The argument ${should_match} can control if the match should
exist (True} or not (False) or don't care (anything but True or False). ${should_match} is True by default</doc>
<status status="FAIL" start="2026-10-06T01:24:01.690531" elapsed="0.443387">'481d36a1-9b9f-4abe-9347-ba3329161944
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.171.109:6640"
    Manager "tcp:10.30.170.97:6640"
    ovs_version: "2.17.11"' does not contain 'is_connected'</status>
</kw>
<return>
<value>${output}</value>
<status status="NOT RUN" start="2026-10-06T01:24:02.133996" elapsed="0.000021"/>
</return>
<arg>${tools_system}</arg>
<doc>Uses "vsctl show" to check for string "is_connected"</doc>
<status status="FAIL" start="2026-10-06T01:24:01.684218" elapsed="0.449902">'481d36a1-9b9f-4abe-9347-ba3329161944
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.171.109:6640"
    Manager "tcp:10.30.170.97:6640"
    ovs_version: "2.17.11"' does not contain 'is_connected'</status>
</kw>
<kw name="Verify OVS Reports Connected" owner="OVSDB">
<kw name="Verify Ovs-vsctl Output" owner="OVSDB">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:03.146058" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:03.145468" elapsed="0.000711"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:03.145427" elapsed="0.000802"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:03.146977" 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-10-06T01:24:03.147188" 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-10-06T01:24:03.146674" elapsed="0.000570"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:03.148365" level="INFO">Attempting to execute command "sudo ovs-vsctl show" on remote system "10.30.170.234" 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-10-06T01:24:03.147708" elapsed="0.000832"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:03.150153" level="INFO">${conn_id} = 245</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-10-06T01:24:03.148990" elapsed="0.001220"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:24:03.152121" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:24:03.152278" 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-10-06T01:24:03.151526" elapsed="0.000803"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:03.152708" elapsed="0.000643"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:24:03.155546" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:24:03.561796" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:23:30 UTC 2026

  System load:  0.17               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:24:02 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:24:03.154595" elapsed="0.407349"/>
</kw>
<msg time="2026-10-06T01:24:03.562019" 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-10-06T01:24:03.153774" elapsed="0.408324"/>
</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-10-06T01:24:03.150666" elapsed="0.411535"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:24:03.562701" level="INFO">Executing command 'sudo ovs-vsctl show'.</msg>
<msg time="2026-10-06T01:24:03.605708" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:24:03.605942" level="INFO">${stdout} = 481d36a1-9b9f-4abe-9347-ba3329161944
    Manager "tcp:10.30.171.171:6640"
        is_connected: true
    Manager "tcp:10.30.171.109:6640"
        is_connected: true
    Manager "tcp:10.30.170.97:6640"...</msg>
<msg time="2026-10-06T01:24:03.606032" level="INFO">${stderr} = </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-10-06T01:24:03.562460" elapsed="0.043620"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:03.606423" elapsed="0.000474"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:03.608008" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:03.607390" elapsed="0.000704"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:24:03.608494" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:03.608259" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:03.608208" elapsed="0.000500"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:24:03.609015" elapsed="0.000054"/>
</return>
<status status="PASS" start="2026-10-06T01:24:03.608827" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:03.608794" elapsed="0.000392"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:24:03.609253" elapsed="0.000030"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:03.610935" elapsed="0.000673"/>
</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-10-06T01:24:03.612074" elapsed="0.000313"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:03.612741" elapsed="0.000212"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:03.609983" elapsed="0.003083"/>
</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-10-06T01:24:03.144474" elapsed="0.468762"/>
</kw>
<msg time="2026-10-06T01:24:03.613344" 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-10-06T01:24:03.143249" elapsed="0.470198"/>
</kw>
<msg time="2026-10-06T01:24:03.613820" level="INFO">${output} = 481d36a1-9b9f-4abe-9347-ba3329161944
    Manager "tcp:10.30.171.171:6640"
        is_connected: true
    Manager "tcp:10.30.171.109:6640"
        is_connected: true
    Manager "tcp:10.30.170.97:6640"...</msg>
<var>${output}</var>
<arg>${ovs_system}</arg>
<arg>sudo ovs-vsctl ${vsctl_args}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:24:03.142177" elapsed="0.471700"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:03.614853" level="INFO">481d36a1-9b9f-4abe-9347-ba3329161944
    Manager "tcp:10.30.171.171:6640"
        is_connected: true
    Manager "tcp:10.30.171.109:6640"
        is_connected: true
    Manager "tcp:10.30.170.97:6640"
        is_connected: true
    ovs_version: "2.17.11"</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:03.614306" elapsed="0.000644"/>
</kw>
<if>
<branch type="IF" condition="&quot;${should_match}&quot; == &quot;True&quot;">
<kw name="Should Contain" owner="BuiltIn">
<arg>${output}</arg>
<arg>${expected_output}</arg>
<doc>Fails if the `container` does not contain the `item` one or more times.</doc>
<status status="PASS" start="2026-10-06T01:24:03.615538" elapsed="0.000708"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:03.615085" elapsed="0.001240"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:03.615047" elapsed="0.001330"/>
</if>
<if>
<branch type="IF" condition="&quot;${should_match}&quot; == &quot;False&quot;">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${output}</arg>
<arg>${expected_output}</arg>
<doc>Fails if the `container` contains the `item`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:03.617000" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:03.616492" elapsed="0.000625"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:03.616457" elapsed="0.000710"/>
</if>
<return>
<value>${output}</value>
<status status="PASS" start="2026-10-06T01:24:03.617234" elapsed="0.000056"/>
</return>
<msg time="2026-10-06T01:24:03.617512" level="INFO">${output} = 481d36a1-9b9f-4abe-9347-ba3329161944
    Manager "tcp:10.30.171.171:6640"
        is_connected: true
    Manager "tcp:10.30.171.109:6640"
        is_connected: true
    Manager "tcp:10.30.170.97:6640"...</msg>
<var>${output}</var>
<arg>show</arg>
<arg>is_connected</arg>
<arg>${tools_system}</arg>
<doc>A wrapper keyword to make it easier to validate ovs-vsctl output, and gives an easy
way to check this output in a WUKS. The argument ${should_match} can control if the match should
exist (True} or not (False) or don't care (anything but True or False). ${should_match} is True by default</doc>
<status status="PASS" start="2026-10-06T01:24:03.141199" elapsed="0.476367"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-10-06T01:24:03.617721" elapsed="0.000056"/>
</return>
<arg>${tools_system}</arg>
<doc>Uses "vsctl show" to check for string "is_connected"</doc>
<status status="PASS" start="2026-10-06T01:24:03.134813" elapsed="0.483127"/>
</kw>
<msg time="2026-10-06T01:24:03.618100" level="INFO">${output} = 481d36a1-9b9f-4abe-9347-ba3329161944
    Manager "tcp:10.30.171.171:6640"
        is_connected: true
    Manager "tcp:10.30.171.109:6640"
        is_connected: true
    Manager "tcp:10.30.170.97:6640"...</msg>
<var>${output}</var>
<arg>5s</arg>
<arg>1s</arg>
<arg>Verify OVS Reports Connected</arg>
<arg>${tools_system}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:24:01.683149" elapsed="1.935004"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:03.619144" level="INFO">481d36a1-9b9f-4abe-9347-ba3329161944
    Manager "tcp:10.30.171.171:6640"
        is_connected: true
    Manager "tcp:10.30.171.109:6640"
        is_connected: true
    Manager "tcp:10.30.170.97:6640"
        is_connected: true
    ovs_version: "2.17.11"</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:03.618587" elapsed="0.000650"/>
</kw>
<kw name="Get From List" owner="Collections">
<msg time="2026-10-06T01:24:03.619987" level="INFO">${controller_index} = 1</msg>
<var>${controller_index}</var>
<arg>${index_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="PASS" start="2026-10-06T01:24:03.619578" elapsed="0.000462"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:03.622281" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:24:03.621251" elapsed="0.001086"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:24:03.622429" elapsed="0.000059"/>
</return>
<msg time="2026-10-06T01:24:03.622756" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${controller_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:24:03.620475" elapsed="0.002335"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:03.627700" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:03.627284" elapsed="0.000452"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:03.643237" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:03.643637" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Mon, 05-Oct-2026 01:24:03 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:24:03.644243" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:03.627949" elapsed="0.016351"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:03.647836" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:24:03.646506" elapsed="0.001668">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:24:03.645924" elapsed="0.002555">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:03.649008" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:03.648618" elapsed="0.000508"/>
</branch>
<status status="FAIL" start="2026-10-06T01:24:03.645880" elapsed="0.003297">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:03.649713" elapsed="0.000046"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:24:03.649892" elapsed="0.000037"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:24:03.644929" elapsed="0.005237">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:24:03.650723" elapsed="0.000055"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:03.651111" elapsed="0.000043"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:03.651487" elapsed="0.000041"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:03.651899" elapsed="0.000043"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:03.652354" elapsed="0.000041"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:03.653011" elapsed="0.000042"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:03.653393" elapsed="0.000041"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:03.653827" elapsed="0.000044"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:03.654214" elapsed="0.000040"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:03.654718" elapsed="0.000045"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:24:03.652714" elapsed="0.002126"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:24:03.652499" elapsed="0.002397"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:24:03.654978" elapsed="0.000031"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:24:03.626739" elapsed="0.028498">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:05.661473" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:05.660759" elapsed="0.000780"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:05.672532" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:05.672980" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:24:05.673274" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:05.661950" elapsed="0.011378"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:05.676644" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:24:05.675441" elapsed="0.001670">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:24:05.674852" elapsed="0.002513">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:05.677883" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:05.677504" elapsed="0.000501"/>
</branch>
<status status="FAIL" start="2026-10-06T01:24:05.674805" elapsed="0.003305">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:05.678612" elapsed="0.000043"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:24:05.678796" elapsed="0.000038"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:24:05.673950" elapsed="0.005122">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:24:05.680153" elapsed="0.000054"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:05.680604" elapsed="0.000044"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:05.681040" elapsed="0.000042"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:05.681403" elapsed="0.000041"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:05.681895" elapsed="0.000042"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:05.682492" elapsed="0.000041"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:05.682929" elapsed="0.000044"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:05.683323" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:05.683750" elapsed="0.000045"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:05.684219" elapsed="0.000042"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:24:05.682202" elapsed="0.002136"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:24:05.682039" elapsed="0.002355"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:24:05.684473" elapsed="0.000032"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:24:05.659599" elapsed="0.025186">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:07.690769" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:07.690038" elapsed="0.000797"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:07.701425" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:07.701863" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:24:07.702255" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:07.691185" elapsed="0.011125"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:07.705758" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:24:07.704514" elapsed="0.001574">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:24:07.703921" elapsed="0.002470">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:07.706923" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:07.706536" elapsed="0.000505"/>
</branch>
<status status="FAIL" start="2026-10-06T01:24:07.703874" elapsed="0.003218">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:07.707594" elapsed="0.000044"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:24:07.707832" elapsed="0.000043"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:24:07.702933" elapsed="0.005180">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:24:07.708620" elapsed="0.000050"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:07.709056" elapsed="0.000043"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:07.709433" elapsed="0.000041"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:07.709842" elapsed="0.000043"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:07.710294" elapsed="0.000041"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:07.710930" elapsed="0.000043"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:07.711316" elapsed="0.000041"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:07.711741" elapsed="0.000045"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:07.712128" elapsed="0.000041"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:07.712587" elapsed="0.000041"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:24:07.710594" elapsed="0.002156"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:24:07.710432" elapsed="0.002377"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:24:07.712889" elapsed="0.000033"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:24:07.688973" elapsed="0.024177">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:09.720165" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:09.719412" elapsed="0.000816"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:09.730890" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:09.731265" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:24:09.731577" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:09.720586" elapsed="0.011047"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:09.735055" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:24:09.733814" elapsed="0.001649">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:24:09.733175" elapsed="0.002590">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:09.736248" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:09.735908" elapsed="0.000459"/>
</branch>
<status status="FAIL" start="2026-10-06T01:24:09.733129" elapsed="0.003336">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:09.737024" elapsed="0.000046"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:24:09.737158" elapsed="0.000035"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:24:09.732258" elapsed="0.005167">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:24:09.737987" elapsed="0.000052"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:09.738431" elapsed="0.000044"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:09.738867" elapsed="0.000044"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:09.739234" elapsed="0.000041"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:09.739729" elapsed="0.000044"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:09.740317" elapsed="0.000042"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:09.740750" elapsed="0.000044"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:09.741144" elapsed="0.000041"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:09.741528" elapsed="0.000041"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:09.742034" elapsed="0.000043"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:24:09.740027" elapsed="0.002131"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:24:09.739874" elapsed="0.002340"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:24:09.742293" elapsed="0.000032"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:24:09.718238" elapsed="0.024316">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:11.749240" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:11.748447" elapsed="0.000879"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:11.760515" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:11.760977" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:24:11.761380" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:11.749769" elapsed="0.011668"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:11.765127" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:24:11.763713" elapsed="0.001792">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:24:11.763087" elapsed="0.002826">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:11.766409" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:11.766067" elapsed="0.000460"/>
</branch>
<status status="FAIL" start="2026-10-06T01:24:11.763040" elapsed="0.003555">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:11.767235" elapsed="0.000048"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:24:11.767429" elapsed="0.000039"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:24:11.762107" elapsed="0.005699">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:24:11.768340" elapsed="0.000054"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:11.768792" elapsed="0.000046"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:11.769185" elapsed="0.000041"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:11.769550" elapsed="0.000042"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:11.770089" elapsed="0.000046"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:11.770711" elapsed="0.000066"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:11.771164" elapsed="0.000491"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:11.772091" elapsed="0.000047"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:11.772529" elapsed="0.000048"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:11.773181" elapsed="0.000053"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:24:11.770395" elapsed="0.002924"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:24:11.770238" elapsed="0.003140"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:24:11.773466" elapsed="0.000047"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:24:11.747297" elapsed="0.026564">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:13.780028" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:13.779233" elapsed="0.000858"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:13.790751" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:13.791138" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:24:13.791426" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:13.780449" elapsed="0.011031"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:13.794868" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:24:13.793614" elapsed="0.001659">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:24:13.793026" elapsed="0.002500">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:13.796055" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:13.795665" elapsed="0.000510"/>
</branch>
<status status="FAIL" start="2026-10-06T01:24:13.792980" elapsed="0.003291">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:13.796826" elapsed="0.000046"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:24:13.796962" elapsed="0.000035"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:24:13.792110" elapsed="0.005120">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:24:13.797785" elapsed="0.000051"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:13.798225" elapsed="0.000044"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:13.798605" elapsed="0.000041"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:13.799023" elapsed="0.000042"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:13.799469" elapsed="0.000041"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:13.800112" elapsed="0.000041"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:13.800496" elapsed="0.000041"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:13.800931" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:13.801314" elapsed="0.000042"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:13.801817" elapsed="0.000044"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:24:13.799820" elapsed="0.002119"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:24:13.799611" elapsed="0.002383"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:24:13.802074" elapsed="0.000030"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:24:13.778138" elapsed="0.024188">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:15.808334" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:15.807592" elapsed="0.000807"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:15.819456" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:15.819930" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:24:15.820319" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:15.808805" elapsed="0.011569"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:15.823741" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:24:15.822511" elapsed="0.001631">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:24:15.821922" elapsed="0.002521">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:15.825426" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:15.825080" elapsed="0.000463"/>
</branch>
<status status="FAIL" start="2026-10-06T01:24:15.821877" elapsed="0.003716">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:15.826143" elapsed="0.000046"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:24:15.826326" elapsed="0.000039"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:24:15.821007" elapsed="0.005599">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:24:15.827167" elapsed="0.000052"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:15.827549" elapsed="0.000042"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:15.827976" elapsed="0.000043"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:15.828371" elapsed="0.000040"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:15.828934" elapsed="0.000057"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:15.829553" elapsed="0.000041"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:15.829992" elapsed="0.000044"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:15.830384" elapsed="0.000040"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:15.830810" elapsed="0.000043"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:15.831268" elapsed="0.000040"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:24:15.829258" elapsed="0.002125"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:24:15.829099" elapsed="0.002340"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:24:15.831520" elapsed="0.000030"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:24:15.806493" elapsed="0.025334">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:17.838226" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:17.837471" elapsed="0.000818"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:17.849395" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:17.849846" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:24:17.850138" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:17.838646" elapsed="0.011547"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:17.853841" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:24:17.852450" elapsed="0.001804">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:24:17.851807" elapsed="0.002727">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:17.855067" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:17.854674" elapsed="0.000510"/>
</branch>
<status status="FAIL" start="2026-10-06T01:24:17.851729" elapsed="0.003555">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:17.855840" elapsed="0.000047"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:24:17.855975" elapsed="0.000035"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:24:17.850827" elapsed="0.005416">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:24:17.856801" elapsed="0.000053"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:17.857242" elapsed="0.000043"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:17.857621" elapsed="0.000040"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:17.858036" elapsed="0.000049"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:17.858547" elapsed="0.000043"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:17.859201" elapsed="0.000041"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:17.859666" elapsed="0.000085"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:17.860133" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:17.860514" elapsed="0.000054"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:17.861092" elapsed="0.000045"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:24:17.858910" elapsed="0.002306"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:24:17.858725" elapsed="0.002547"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:24:17.861352" elapsed="0.000030"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:24:17.836375" elapsed="0.025233">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:19.868200" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:19.867377" elapsed="0.000888"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:19.879219" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:19.879611" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:24:19.880077" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:19.868624" elapsed="0.011509"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:19.883514" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:24:19.882268" elapsed="0.001629">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:24:19.881626" elapsed="0.002572">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:19.884704" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:19.884339" elapsed="0.000508"/>
</branch>
<status status="FAIL" start="2026-10-06T01:24:19.881581" elapsed="0.003317">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:19.885391" elapsed="0.000043"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:24:19.885574" elapsed="0.000037"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:24:19.880748" elapsed="0.005155">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:24:19.886451" elapsed="0.000051"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:19.886882" elapsed="0.000044"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:19.887287" elapsed="0.000042"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:19.887649" elapsed="0.000075"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:19.888159" elapsed="0.000043"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:19.888774" elapsed="0.000060"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:19.889201" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:19.889588" elapsed="0.000041"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:19.890021" elapsed="0.000041"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:19.890477" elapsed="0.000040"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:24:19.888457" elapsed="0.002134"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:24:19.888301" elapsed="0.002346"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:24:19.890816" elapsed="0.000037"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:24:19.866284" elapsed="0.024800">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:21.897998" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:21.897198" elapsed="0.000866"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:21.908651" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:21.909172" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:24:21.909494" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:21.898445" elapsed="0.011108"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:21.913007" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:24:21.911782" elapsed="0.001631">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:24:21.911165" elapsed="0.002499">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:21.914190" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:21.913854" elapsed="0.000454"/>
</branch>
<status status="FAIL" start="2026-10-06T01:24:21.911120" elapsed="0.003287">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:21.915010" elapsed="0.000052"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:24:21.915154" elapsed="0.000035"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:24:21.910221" elapsed="0.005205">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:24:21.915990" elapsed="0.000052"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:21.916511" elapsed="0.000050"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:21.916964" elapsed="0.000044"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:21.917334" elapsed="0.000051"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:21.917867" elapsed="0.000045"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:21.918461" elapsed="0.000041"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:21.918892" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:21.919279" elapsed="0.000489"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:21.920158" elapsed="0.000043"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:21.920621" elapsed="0.000042"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:24:21.918175" elapsed="0.002602"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:24:21.918017" elapsed="0.002838"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:24:21.920936" elapsed="0.000032"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:24:21.895924" elapsed="0.025273">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:23.927313" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:23.926565" elapsed="0.000813"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:23.937714" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:23.938133" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:24:23.938523" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:23.927766" elapsed="0.010813"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:23.941977" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:24:23.940759" elapsed="0.001541">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:24:23.940143" elapsed="0.002472">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:23.943142" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:23.942786" elapsed="0.000475"/>
</branch>
<status status="FAIL" start="2026-10-06T01:24:23.940096" elapsed="0.003216">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:23.943860" elapsed="0.000050"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:24:23.944046" elapsed="0.000037"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:24:23.939216" elapsed="0.005102">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:24:23.944879" elapsed="0.000053"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:23.945265" elapsed="0.000043"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:23.945642" elapsed="0.000070"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:23.946089" elapsed="0.000043"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:23.946542" elapsed="0.000043"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:23.947261" elapsed="0.000042"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:23.947649" elapsed="0.000071"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:23.948089" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:23.948474" elapsed="0.000042"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:23.948972" elapsed="0.000043"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:24:23.946963" elapsed="0.002128"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:24:23.946760" elapsed="0.002387"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:24:23.949226" elapsed="0.000031"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:24:23.925456" elapsed="0.024029">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:25.956151" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:25.955343" elapsed="0.000872"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:25.968754" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:25.969162" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:24:25.969452" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:25.956571" elapsed="0.012935"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:25.972876" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:24:25.971625" elapsed="0.001661">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:24:25.971041" elapsed="0.002497">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:25.974058" elapsed="0.000464"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:25.973675" elapsed="0.000922"/>
</branch>
<status status="FAIL" start="2026-10-06T01:24:25.970995" elapsed="0.003734">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:25.975265" elapsed="0.000046"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:24:25.975396" elapsed="0.000036"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:24:25.970129" elapsed="0.005538">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:24:25.976233" elapsed="0.000051"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:25.976668" elapsed="0.000083"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:25.977116" elapsed="0.000042"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:25.977479" elapsed="0.000040"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:25.977970" elapsed="0.000044"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:25.978560" elapsed="0.000042"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:25.978991" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:25.979379" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:25.979786" elapsed="0.000064"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:25.980268" elapsed="0.000042"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:24:25.978272" elapsed="0.002114"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:24:25.978115" elapsed="0.002325"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:24:25.980519" elapsed="0.000030"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:24:25.954181" elapsed="0.026625">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:27.986753" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:27.986020" elapsed="0.000796"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:27.997140" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:27.997526" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:24:27.997987" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:27.987183" elapsed="0.010872"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:28.001413" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:24:28.000236" elapsed="0.001548">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:24:27.999566" elapsed="0.002540">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:28.002577" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:28.002245" elapsed="0.000499"/>
</branch>
<status status="FAIL" start="2026-10-06T01:24:27.999521" elapsed="0.003277">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:28.003310" elapsed="0.000044"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:24:28.003486" elapsed="0.000036"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:24:27.998646" elapsed="0.005137">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:24:28.004351" elapsed="0.000050"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:28.004758" elapsed="0.000045"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:28.005160" elapsed="0.000042"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:28.005522" elapsed="0.000042"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:28.006016" elapsed="0.000045"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:28.006593" elapsed="0.000041"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:28.007023" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:28.007405" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:28.007814" elapsed="0.000060"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:28.008289" elapsed="0.000042"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:24:28.006309" elapsed="0.002099"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:24:28.006158" elapsed="0.002303"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:24:28.008540" elapsed="0.000031"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:24:27.985004" elapsed="0.023820">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:30.018349" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:30.017517" elapsed="0.000892"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:30.029511" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:30.029942" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:24:30.030251" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:30.018790" elapsed="0.011517"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:30.033803" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:24:30.032489" elapsed="0.001829">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:24:30.031901" elapsed="0.002671">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:30.035106" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:30.034742" elapsed="0.000485"/>
</branch>
<status status="FAIL" start="2026-10-06T01:24:30.031831" elapsed="0.003494">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:30.035878" elapsed="0.000047"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:24:30.036012" elapsed="0.000035"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:24:30.030960" elapsed="0.005318">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:24:30.036813" elapsed="0.000072"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:30.037269" elapsed="0.000044"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:30.037647" elapsed="0.000071"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:30.038064" elapsed="0.000042"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:30.038512" elapsed="0.000041"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:30.039142" elapsed="0.000041"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:30.039525" elapsed="0.000041"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:30.039976" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:30.040359" elapsed="0.000041"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:30.041168" elapsed="0.000048"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:24:30.038833" elapsed="0.002463"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:24:30.038649" elapsed="0.002701"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:24:30.041428" elapsed="0.000032"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:24:30.016499" elapsed="0.025216">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:32.047632" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:32.046923" elapsed="0.000803"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:32.057664" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:32.058139" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:24:32.058523" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:32.048107" elapsed="0.010475"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:32.062011" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:24:32.060765" elapsed="0.001576">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:24:32.060142" elapsed="0.002507">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:32.063198" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:32.062829" elapsed="0.000489"/>
</branch>
<status status="FAIL" start="2026-10-06T01:24:32.060097" elapsed="0.003272">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:32.063926" elapsed="0.000049"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:24:32.064121" elapsed="0.000039"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:24:32.059225" elapsed="0.005179">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:24:32.064978" elapsed="0.000054"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:32.065364" elapsed="0.000043"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:32.065803" elapsed="0.000068"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:32.066205" elapsed="0.000041"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:32.066657" elapsed="0.000073"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:32.067298" elapsed="0.000041"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:32.067712" elapsed="0.000045"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:32.068177" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:32.068556" elapsed="0.000041"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:32.069057" elapsed="0.000042"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:24:32.067008" elapsed="0.002167"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:24:32.066830" elapsed="0.002400"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:24:32.069309" elapsed="0.000031"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:24:32.045833" elapsed="0.023731">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:34.076149" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:34.075415" elapsed="0.000793"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:34.087368" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:34.087790" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:24:34.088138" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:34.076565" elapsed="0.011631"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:34.091556" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:24:34.090356" elapsed="0.001663">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:24:34.089740" elapsed="0.002536">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.092786" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:34.092416" elapsed="0.000514"/>
</branch>
<status status="FAIL" start="2026-10-06T01:24:34.089662" elapsed="0.003369">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.093540" elapsed="0.000046"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:24:34.093671" elapsed="0.000066"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:24:34.088819" elapsed="0.005180">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.094508" elapsed="0.000052"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.095005" elapsed="0.000047"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.095393" elapsed="0.000041"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.095792" elapsed="0.000043"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.096269" elapsed="0.000043"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.096902" elapsed="0.000045"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.097293" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.097673" elapsed="0.000072"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.098113" elapsed="0.000042"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.098563" elapsed="0.000041"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:24:34.096560" elapsed="0.002145"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:24:34.096408" elapsed="0.002356"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:24:34.098844" elapsed="0.000052"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:24:34.074387" elapsed="0.024738">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<msg time="2026-10-06T01:24:34.099428" level="FAIL">Keyword 'OVSDB.Get OVSDB UUID' failed after retrying for 30 seconds. The last error was: Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${ovsdb_uuid}</var>
<arg>30s</arg>
<arg>2s</arg>
<arg>OVSDB.Get OVSDB UUID</arg>
<arg>controller_http_session=${session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-10-06T01:24:03.623200" elapsed="30.476624">Keyword 'OVSDB.Get OVSDB UUID' failed after retrying for 30 seconds. The last error was: Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interfa...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<return>
<value>${ovsdb_uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:24:34.100048" elapsed="0.000034"/>
</return>
<var>${ovsdb_uuid}</var>
<doc>Connect OVS to the list of controllers in the ${controller_index_list} or all if no list is provided.</doc>
<status status="FAIL" start="2026-10-06T01:23:59.264725" elapsed="34.835570">Keyword 'OVSDB.Get OVSDB UUID' failed after retrying for 30 seconds. The last error was: Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interfa...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${ovsdb_uuid}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.100809" elapsed="0.000046"/>
</kw>
<doc>Connect OVS to all cluster instances.</doc>
<status status="FAIL" start="2026-10-06T01:23:58.894505" elapsed="35.206722">Keyword 'OVSDB.Get OVSDB UUID' failed after retrying for 30 seconds. The last error was: Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interfa...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</test>
<test id="s1-s1-s2-t3" name="Check Entity Owner Status And Find Owner and Candidate Before Fail" line="26">
<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-10-06T01:24:34.105283" elapsed="0.000525"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:24:34.104493" elapsed="0.001458"/>
</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-10-06T01:24:34.108295" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:34.108098" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.108055" elapsed="0.000384"/>
</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-10-06T01:24:34.113472" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:34.113279" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.113241" elapsed="0.000376"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:34.116036" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:34.115230" elapsed="0.000865"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:34.117105" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:34.116434" elapsed="0.000727"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:34.117253" elapsed="0.000061"/>
</return>
<msg time="2026-10-06T01:24:34.117539" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:34.114147" elapsed="0.003444"/>
</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-10-06T01:24:34.123285" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:34.123094" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.123055" elapsed="0.000370"/>
</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-10-06T01:24:34.126081" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:34.125883" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.125820" elapsed="0.000402"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:34.127123" level="INFO">${karaf_connection_index} = 222</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-10-06T01:24:34.126543" elapsed="0.000638"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:34.128061" 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-10-06T01:24:34.127609" elapsed="0.000508"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:34.163110" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:34.129537" elapsed="0.033839"/>
</kw>
<msg time="2026-10-06T01:24:34.163612" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:34.163671" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.128464" elapsed="0.035297"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:34.272360" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:34.164612" elapsed="0.107931"/>
</kw>
<msg time="2026-10-06T01:24:34.272738" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:34.272781" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.164011" elapsed="0.108804"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.273108" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:34.272900" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.272880" elapsed="0.000323"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:34.273749" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:34.273383" elapsed="0.000456"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.274115" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:34.273915" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.273897" elapsed="0.000312"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:34.274240" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:34.276853" elapsed="0.000494"/>
</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-10-06T01:24:34.278564" elapsed="0.000691"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:34.280445" elapsed="0.000344"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:34.275161" elapsed="0.005696"/>
</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-10-06T01:24:34.274517" elapsed="0.006470"/>
</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="PASS" start="2026-10-06T01:24:34.125201" elapsed="0.155863"/>
</kw>
<msg time="2026-10-06T01:24:34.281148" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:34.281187" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.123784" elapsed="0.157437"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:34.281376" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:34.281291" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.281274" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:24:34.281907" elapsed="0.000025"/>
</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-10-06T01:24:34.282241" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:34.282308" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:24:34.122390" elapsed="0.160003"/>
</kw>
<msg time="2026-10-06T01:24:34.282476" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:34.282516" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.118374" elapsed="0.164176"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.282854" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:34.282617" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.282601" elapsed="0.000341"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:34.118064" elapsed="0.164899"/>
</iter>
<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-10-06T01:24:34.285314" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:34.285230" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.285212" elapsed="0.000165"/>
</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-10-06T01:24:34.286491" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:34.286407" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.286390" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:34.287137" level="INFO">${karaf_connection_index} = 224</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-10-06T01:24:34.286907" elapsed="0.000255"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:34.287491" 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-10-06T01:24:34.287322" elapsed="0.000193"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:34.321953" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:34.288105" elapsed="0.034037"/>
</kw>
<msg time="2026-10-06T01:24:34.322301" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:34.322343" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.287665" elapsed="0.034711"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:34.419536" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:34.323023" elapsed="0.096733"/>
</kw>
<msg time="2026-10-06T01:24:34.419932" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:34.419974" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.322539" elapsed="0.097469"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.420284" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:34.420080" elapsed="0.000277"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.420061" elapsed="0.000321"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:34.420956" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:34.420561" elapsed="0.000487"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.421307" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:34.421109" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.421093" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:34.421458" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:34.424007" elapsed="0.000481"/>
</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-10-06T01:24:34.425769" elapsed="0.000475"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:34.427621" elapsed="0.000492"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:34.422283" elapsed="0.005901"/>
</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-10-06T01:24:34.421762" elapsed="0.006542"/>
</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="PASS" start="2026-10-06T01:24:34.286149" elapsed="0.142235"/>
</kw>
<msg time="2026-10-06T01:24:34.428466" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:34.428505" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.285522" elapsed="0.143017"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:34.428783" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-10-06T01:24:34.428611" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.428593" elapsed="0.000285"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.429195" elapsed="0.000026"/>
</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-10-06T01:24:34.429515" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:34.429582" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:24:34.284942" elapsed="0.144727"/>
</kw>
<msg time="2026-10-06T01:24:34.429786" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:34.429827" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.283210" elapsed="0.146665"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.430171" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:34.429951" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.429933" elapsed="0.000310"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:34.283073" elapsed="0.147191"/>
</iter>
<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-10-06T01:24:34.432714" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:34.432611" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.432593" elapsed="0.000185"/>
</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-10-06T01:24:34.433909" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:34.433803" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.433785" elapsed="0.000189"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:34.434348" level="INFO">${karaf_connection_index} = 226</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-10-06T01:24:34.434118" elapsed="0.000256"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:34.434737" 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-10-06T01:24:34.434537" elapsed="0.000227"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:34.472051" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:34.435370" elapsed="0.036853"/>
</kw>
<msg time="2026-10-06T01:24:34.472401" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:34.472445" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.434937" elapsed="0.037543"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:34.587358" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:34.473124" elapsed="0.114424"/>
</kw>
<msg time="2026-10-06T01:24:34.587733" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:34.587784" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.472645" elapsed="0.115177"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.588117" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:34.587911" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.587891" elapsed="0.000324"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:34.588778" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:34.588400" elapsed="0.000488"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.589155" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:34.588954" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.588936" elapsed="0.000314"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:34.589280" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:34.591770" elapsed="0.000497"/>
</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-10-06T01:24:34.593487" elapsed="0.000493"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:34.595364" elapsed="0.000471"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:34.590100" elapsed="0.005824"/>
</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-10-06T01:24:34.589553" elapsed="0.006491"/>
</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="PASS" start="2026-10-06T01:24:34.433507" elapsed="0.162616"/>
</kw>
<msg time="2026-10-06T01:24:34.596206" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:34.596247" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.432935" elapsed="0.163348"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:34.596441" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:34.596353" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.596336" elapsed="0.000183"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.596906" elapsed="0.000027"/>
</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-10-06T01:24:34.597213" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:34.597279" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:34.432321" elapsed="0.165043"/>
</kw>
<msg time="2026-10-06T01:24:34.597448" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:34.597489" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.430509" elapsed="0.167016"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.597945" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:34.597592" elapsed="0.000407"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.597576" elapsed="0.000480"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:34.430373" elapsed="0.167709"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:34.117728" elapsed="0.480381"/>
</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-10-06T01:24:34.112552" elapsed="0.485607"/>
</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-10-06T01:24:34.107460" elapsed="0.490749"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.106426" elapsed="0.491825"/>
</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-10-06T01:24:34.103528" elapsed="0.494770"/>
</kw>
<kw name="Get Ovsdb Entity Owner Status For One Device" owner="ClusterOvsdb">
<msg time="2026-10-06T01:24:34.602006" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<var>${original_owner}</var>
<var>${original_candidate_list}</var>
<arg>ovsdb://uuid/${ovsdb_uuid}</arg>
<arg>1</arg>
<doc>Check Entity Owner Status and identify owner and successors for an ovs device ${device}. Request is sent to controller ${controller_index}.</doc>
<status status="FAIL" start="2026-10-06T01:24:34.600799" elapsed="0.001242">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Get From List" owner="Collections">
<var>${original_candidate}</var>
<arg>${original_candidate_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.602215" elapsed="0.000020"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${original_owner}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.602418" elapsed="0.000018"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${original_candidate}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.602600" elapsed="0.000019"/>
</kw>
<doc>Check Entity Owner Status and identify owner and candidate.</doc>
<status status="FAIL" start="2026-10-06T01:24:34.102029" elapsed="0.500724">Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s1-s2-t4" name="Create Bridge Manually and Verify Before Fail" line="35">
<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-10-06T01:24:34.604343" elapsed="0.000203"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:24:34.604077" elapsed="0.000519"/>
</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-10-06T01:24:34.605789" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:34.605661" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.605642" elapsed="0.000211"/>
</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-10-06T01:24:34.607771" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:34.607671" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.607654" elapsed="0.000180"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:34.608742" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:34.608400" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:34.609199" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:34.608929" elapsed="0.000295"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:34.609264" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:24:34.609390" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:34.608047" elapsed="0.001366"/>
</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-10-06T01:24:34.612066" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:34.611981" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.611963" elapsed="0.000168"/>
</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-10-06T01:24:34.613266" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:34.613180" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.613163" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:34.613729" level="INFO">${karaf_connection_index} = 222</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-10-06T01:24:34.613473" elapsed="0.000284"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:34.614115" 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-10-06T01:24:34.613935" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:34.648639" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:34.614764" elapsed="0.034138"/>
</kw>
<msg time="2026-10-06T01:24:34.649065" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:34.649108" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.614294" elapsed="0.034850"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:34.726247" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:34.649771" elapsed="0.076657"/>
</kw>
<msg time="2026-10-06T01:24:34.726586" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:34.726627" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.649308" elapsed="0.077354"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.726990" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:34.726770" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.726749" elapsed="0.000340"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:34.727614" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:34.727269" elapsed="0.000469"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.728019" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:34.727803" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.727786" elapsed="0.000331"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:34.728148" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:34.730640" elapsed="0.000544"/>
</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-10-06T01:24:34.732413" elapsed="0.000497"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:34.734288" elapsed="0.000312"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:34.728968" elapsed="0.005699"/>
</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-10-06T01:24:34.728424" elapsed="0.006393"/>
</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="PASS" start="2026-10-06T01:24:34.612916" elapsed="0.121994"/>
</kw>
<msg time="2026-10-06T01:24:34.734995" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:34.735036" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.612278" elapsed="0.122793"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:34.735228" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:34.735142" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.735124" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:24:34.735620" elapsed="0.000023"/>
</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-10-06T01:24:34.736029" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:34.736098" 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="PASS" start="2026-10-06T01:24:34.611661" elapsed="0.124526"/>
</kw>
<msg time="2026-10-06T01:24:34.736271" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:34.736313" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.609774" elapsed="0.126577"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.736700" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:34.736462" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.736444" elapsed="0.000338"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:34.609600" elapsed="0.127203"/>
</iter>
<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-10-06T01:24:34.739365" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:34.739278" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.739260" elapsed="0.000169"/>
</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-10-06T01:24:34.740524" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:34.740439" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.740422" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:34.741012" level="INFO">${karaf_connection_index} = 224</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-10-06T01:24:34.740762" elapsed="0.000275"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:34.741374" 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-10-06T01:24:34.741200" elapsed="0.000198"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:34.777444" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:34.742018" elapsed="0.035614"/>
</kw>
<msg time="2026-10-06T01:24:34.777826" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:34.777885" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.741551" elapsed="0.036373"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:34.870988" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:34.778516" elapsed="0.092652"/>
</kw>
<msg time="2026-10-06T01:24:34.871323" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:34.871365" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.778089" elapsed="0.093310"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.871671" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:34.871469" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.871451" elapsed="0.000352"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:34.872341" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:34.872000" elapsed="0.000428"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.872717" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:34.872491" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.872474" elapsed="0.000342"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:34.872847" elapsed="0.000037"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:34.875281" elapsed="0.000512"/>
</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-10-06T01:24:34.877023" elapsed="0.000450"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:34.878843" elapsed="0.000322"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:34.873617" elapsed="0.005615"/>
</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-10-06T01:24:34.873124" elapsed="0.006260"/>
</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="PASS" start="2026-10-06T01:24:34.740181" elapsed="0.139284"/>
</kw>
<msg time="2026-10-06T01:24:34.879549" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:34.879591" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.739579" elapsed="0.140048"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:34.879889" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:24:34.879785" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.879763" elapsed="0.000206"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.880296" elapsed="0.000024"/>
</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-10-06T01:24:34.880598" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:34.880663" elapsed="0.000034"/>
</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="PASS" start="2026-10-06T01:24:34.738982" elapsed="0.141798"/>
</kw>
<msg time="2026-10-06T01:24:34.880877" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:34.880920" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.737069" elapsed="0.143888"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.881247" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:34.881027" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.881011" elapsed="0.000309"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:34.736931" elapsed="0.144409"/>
</iter>
<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-10-06T01:24:34.883960" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:34.883863" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.883845" elapsed="0.000178"/>
</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-10-06T01:24:34.885146" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:34.885058" elapsed="0.000132"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.885042" elapsed="0.000169"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:34.885585" level="INFO">${karaf_connection_index} = 226</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-10-06T01:24:34.885355" elapsed="0.000255"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:34.885989" 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-10-06T01:24:34.885798" elapsed="0.000216"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:34.913163" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:34.886595" elapsed="0.026778"/>
</kw>
<msg time="2026-10-06T01:24:34.913534" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:34.913577" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.886167" elapsed="0.027445"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:34.972759" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:34.914287" elapsed="0.058667"/>
</kw>
<msg time="2026-10-06T01:24:34.973113" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:34.973154" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.913842" elapsed="0.059348"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.973502" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:34.973295" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.973276" elapsed="0.000321"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:34.974170" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:34.973802" elapsed="0.000453"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.974514" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:34.974317" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.974300" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:34.974639" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:34.977165" elapsed="0.000468"/>
</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-10-06T01:24:34.978882" elapsed="0.000446"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:34.980497" elapsed="0.000320"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:34.975488" elapsed="0.005413"/>
</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-10-06T01:24:34.974988" elapsed="0.006030"/>
</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="PASS" start="2026-10-06T01:24:34.884780" elapsed="0.096315"/>
</kw>
<msg time="2026-10-06T01:24:34.981176" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:34.981215" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.884170" elapsed="0.097080"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:34.981402" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:34.981318" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.981301" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.981830" elapsed="0.000025"/>
</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-10-06T01:24:34.982140" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:34.982204" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:34.883509" elapsed="0.098780"/>
</kw>
<msg time="2026-10-06T01:24:34.982373" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:34.982412" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.881586" elapsed="0.100862"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.982862" elapsed="0.000076"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:34.982514" elapsed="0.000455"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.982499" elapsed="0.000493"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:34.881449" elapsed="0.101563"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:34.609460" elapsed="0.373578"/>
</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-10-06T01:24:34.607378" elapsed="0.375709"/>
</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-10-06T01:24:34.605322" elapsed="0.377815"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:34.604796" elapsed="0.378381"/>
</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-10-06T01:24:34.603705" elapsed="0.379518"/>
</kw>
<kw name="Create Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:34.986799" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:34.986528" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:34.986511" elapsed="0.000376"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:34.987214" 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-10-06T01:24:34.987305" 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-10-06T01:24:34.987088" elapsed="0.000241"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:34.987994" level="INFO">Attempting to execute command "sudo ovs-vsctl add-br br-s1" on remote system "10.30.170.234" 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-10-06T01:24:34.987511" elapsed="0.000526"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:34.988505" level="INFO">${conn_id} = 253</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-10-06T01:24:34.988209" elapsed="0.000319"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:24:34.989364" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:24:34.989434" 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-10-06T01:24:34.989106" elapsed="0.000350"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:34.989602" elapsed="0.000313"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:24:34.990664" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:24:35.642511" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:24:35 UTC 2026

  System load:  0.06               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:24:03 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:24:34.990435" elapsed="0.652164"/>
</kw>
<msg time="2026-10-06T01:24:35.642660" 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-10-06T01:24:34.990078" elapsed="0.652671"/>
</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-10-06T01:24:34.988734" elapsed="0.654101"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:24:35.643237" level="INFO">Executing command 'sudo ovs-vsctl add-br br-s1'.</msg>
<msg time="2026-10-06T01:24:35.706294" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:24:35.706520" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:24:35.706607" level="INFO">${stderr} = </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-10-06T01:24:35.643065" elapsed="0.063590"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:35.707097" elapsed="0.000398"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.708533" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:35.708001" elapsed="0.000617"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:24:35.709064" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:35.708821" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.708773" elapsed="0.000438"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:24:35.709494" elapsed="0.000053"/>
</return>
<status status="PASS" start="2026-10-06T01:24:35.709316" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.709286" elapsed="0.000378"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:24:35.709767" elapsed="0.000030"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:35.711339" elapsed="0.000739"/>
</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-10-06T01:24:35.712536" elapsed="0.000349"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:35.713277" elapsed="0.000195"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:35.710415" elapsed="0.003160"/>
</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-10-06T01:24:34.986109" elapsed="0.727647"/>
</kw>
<msg time="2026-10-06T01:24:35.713859" 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-10-06T01:24:34.985562" elapsed="0.728420"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:24:34.985151" elapsed="0.728985"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.715256" level="INFO">${dictionary_operational} = {'br-s1': '5'}</msg>
<var>${dictionary_operational}</var>
<arg>br-s1=5</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:24:35.714552" elapsed="0.000760"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.716398" level="INFO">${dictionary_config} = {'br-s1': '0'}</msg>
<var>${dictionary_config}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:24:35.715757" elapsed="0.000695"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.726509" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:35.725748" elapsed="0.000818"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.727552" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:35.726951" elapsed="0.000654"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:35.727725" elapsed="0.000062"/>
</return>
<msg time="2026-10-06T01:24:35.728032" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:35.724912" elapsed="0.003170"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.734249" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:24:35.733510" elapsed="0.000795"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:24:35.734398" elapsed="0.000058"/>
</return>
<msg time="2026-10-06T01:24:35.734665" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:24:35.732712" elapsed="0.002037"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.737447" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:35.736937" elapsed="0.000630"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.738575" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:35.738062" elapsed="0.000574"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:35.746843" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:35.747050" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '144'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:24:35.747201" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:35.739081" elapsed="0.008157"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.738742" elapsed="0.008550"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:35.747720" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:35.747327" elapsed="0.000566"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.738717" elapsed="0.009228"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.751508" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:35.750142" elapsed="0.001472"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.749525" elapsed="0.002202"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.749484" elapsed="0.002310"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.753184" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:35.752480" elapsed="0.000799"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.751938" elapsed="0.001411"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.751900" elapsed="0.001499"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.754649" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:35.753829" elapsed="0.000945"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:35.755425" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:35.754958" elapsed="0.000585"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.756606" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:35.756009" elapsed="0.000652"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.755593" elapsed="0.001191"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.754915" elapsed="0.001919"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.758081" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:35.757244" elapsed="0.000893"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:35.758803" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:35.758282" elapsed="0.000671"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.760086" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:35.759355" elapsed="0.000786"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.759006" elapsed="0.001207"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.758243" elapsed="0.002015"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:35.760568" elapsed="0.000703"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:24:35.762189" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:35.761616" elapsed="0.000627"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:24:35.762573" elapsed="0.000524"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:24:35.748670" elapsed="0.014550"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:24:35.763537" elapsed="0.000055"/>
</return>
<status status="PASS" start="2026-10-06T01:24:35.763357" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.763320" elapsed="0.000426"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:35.764078" elapsed="0.000044"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:24:35.764218" elapsed="0.000031"/>
</return>
<msg time="2026-10-06T01:24:35.764653" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:24:35.735427" elapsed="0.029284"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:24:35.764776" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:24:35.764957" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:24:35.731732" elapsed="0.033259"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.766421" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:24:35.765988" elapsed="0.000518"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:24:35.765749" elapsed="0.000807"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:24:35.765584" elapsed="0.001011"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:24:35.765274" elapsed="0.001475"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:35.728437" elapsed="0.038361"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.770369" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:35.769995" elapsed="0.000408"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:24:35.770461" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:24:35.770629" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:24:35.769503" elapsed="0.001158"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.772318" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:35.772011" elapsed="0.000366"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.774851" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:35.772634" elapsed="0.002315"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:35.795297" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:35.795441" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node01q8j2dkwra6wr3cwxwejtlypa1.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Mon, 05-Oct-2026 01:24:35 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:24:35.795570" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:35.775377" elapsed="0.020225"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.775043" elapsed="0.020613"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:35.795941" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:35.795712" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.775019" elapsed="0.021033"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.797824" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:35.797337" elapsed="0.000617"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.797007" elapsed="0.000994"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.796982" elapsed="0.001052"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.798836" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:35.798436" elapsed="0.000472"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.798106" elapsed="0.000846"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.798085" elapsed="0.000899"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.799936" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:35.799220" elapsed="0.000761"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:35.800368" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:35.800076" elapsed="0.000367"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.801122" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:35.800726" elapsed="0.000431"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.800475" elapsed="0.000729"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.800050" elapsed="0.001182"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.801984" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:35.801467" elapsed="0.000552"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:35.802391" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:35.802109" elapsed="0.000356"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.803127" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:35.802735" elapsed="0.000426"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.802496" elapsed="0.000710"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.802085" elapsed="0.001150"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:35.803431" elapsed="0.000429"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:24:35.804461" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:35.804146" elapsed="0.000349"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:24:35.804784" elapsed="0.000323"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:24:35.796492" elapsed="0.008694"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:24:35.805385" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-10-06T01:24:35.805273" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.805250" elapsed="0.000244"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:35.805709" elapsed="0.000029"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:24:35.805801" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:24:35.806115" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:24:35.771109" elapsed="0.035041"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:24:35.806214" elapsed="0.000034"/>
</return>
<msg time="2026-10-06T01:24:35.806380" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:24:35.768914" elapsed="0.037498"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.807848" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:24:35.807405" elapsed="0.000542"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:24:35.807188" elapsed="0.000810"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:24:35.807044" elapsed="0.000992"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:24:35.806713" elapsed="0.001388"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:35.766930" elapsed="0.041214"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.811833" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:35.811434" elapsed="0.000451"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:24:35.811945" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:24:35.812118" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:24:35.810988" elapsed="0.001162"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.813761" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:35.813434" elapsed="0.000385"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.814398" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:35.814093" elapsed="0.000361"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:35.829575" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:35.829760" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node01iz04a3k2d6itg7w98bvdcezy1.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Mon, 05-Oct-2026 01:24:35 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:24:35.829903" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:35.814883" elapsed="0.015056"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.814538" elapsed="0.015456"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:35.830237" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:35.830027" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.814515" elapsed="0.015830"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.832173" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:35.831700" elapsed="0.000532"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.831348" elapsed="0.000928"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.831324" elapsed="0.000984"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.833149" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:35.832750" elapsed="0.000456"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.832383" elapsed="0.000867"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.832359" elapsed="0.000922"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.834049" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:35.833518" elapsed="0.000567"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:35.834455" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:35.834174" elapsed="0.000353"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.835235" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:35.834841" elapsed="0.000428"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.834559" elapsed="0.000756"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.834151" elapsed="0.001192"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.836085" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:35.835576" elapsed="0.000544"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:35.836489" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:35.836209" elapsed="0.000353"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.837207" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:35.836828" elapsed="0.000412"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.836592" elapsed="0.000693"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.836186" elapsed="0.001127"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:35.837506" elapsed="0.000440"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:24:35.838466" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:35.838163" elapsed="0.000335"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:24:35.838727" elapsed="0.000312"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:24:35.830811" elapsed="0.008305"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:24:35.839316" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-10-06T01:24:35.839203" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.839179" elapsed="0.000246"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:35.839618" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:24:35.839729" elapsed="0.000021"/>
</return>
<msg time="2026-10-06T01:24:35.840046" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:24:35.812558" elapsed="0.027524"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:24:35.840145" elapsed="0.000034"/>
</return>
<msg time="2026-10-06T01:24:35.840314" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:24:35.810377" elapsed="0.029969"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.842002" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:24:35.841539" elapsed="0.000547"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:24:35.841318" elapsed="0.000818"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:24:35.841173" elapsed="0.001002"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:24:35.840625" elapsed="0.001617"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:35.808253" elapsed="0.034075"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:35.728189" elapsed="0.114177"/>
</for>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:24:35.723788" elapsed="0.118644"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:24:35.716923" elapsed="0.125574"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.848661" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:35.848208" elapsed="0.000509"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.849330" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:35.848949" elapsed="0.000414"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:35.849420" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:24:35.849597" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:35.847661" elapsed="0.001968"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.853371" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:24:35.852994" elapsed="0.000412"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:24:35.853464" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:24:35.853636" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:24:35.852487" elapsed="0.001180"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.855325" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:35.855016" elapsed="0.000376"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.856074" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:35.855739" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:35.864522" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:35.864707" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '5396'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;d7ffc991-4f98-4b3e-a4ef-ee88c416571f&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;f0619ae3-b048-4f2c-997d-a1630fead11a&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;5ad100d8-f99e-45e4-8019-06d5905d7559&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;92:c9:ff:d7:3e:4b&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:92:c9:ff:d7:3e:4b&lt;/datapath-id&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:24:35.864913" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:35.856407" elapsed="0.008533"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.856177" elapsed="0.008802"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:35.865153" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:35.865002" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.856160" elapsed="0.009071"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.867107" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;d7ffc991-4f98-4b3e-a4ef-ee88c416571f&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;f0619ae3-b048-4f2c-997d-a1630fead11a&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;5ad100d8-f99e-45e4-8019-06d5905d7559&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;92:c9:ff:d7:3e:4b&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:92:c9:ff:d7:3e:4b&lt;/datapath-id&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:35.866537" elapsed="0.000718"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.866206" elapsed="0.001095"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.866181" elapsed="0.001151"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.868148" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:35.867755" elapsed="0.000450"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.867404" elapsed="0.000879"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.867383" elapsed="0.000935"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.869090" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:35.868564" elapsed="0.000566"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:35.869509" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:35.869220" elapsed="0.000363"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.870453" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:35.869853" elapsed="0.000635"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.869614" elapsed="0.000921"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.869197" elapsed="0.001367"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.871318" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:35.870823" elapsed="0.000530"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:35.871771" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:35.871444" elapsed="0.000408"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.872508" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:35.872128" elapsed="0.000415"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.871903" elapsed="0.000688"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.871420" elapsed="0.001199"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:35.872853" elapsed="0.000444"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:24:35.873851" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:35.873517" elapsed="0.000383"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:24:35.874112" elapsed="0.000293"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:24:35.865654" elapsed="0.008829"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:24:35.874703" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-10-06T01:24:35.874570" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.874546" elapsed="0.000268"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:35.875028" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:24:35.875116" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:24:35.875491" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1&lt;/node-id...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:24:35.854117" elapsed="0.021412"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:24:35.875592" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:24:35.875786" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1&lt;/node-id...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:24:35.851912" elapsed="0.023911"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.877255" level="INFO">Item found from container 5 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:24:35.876809" elapsed="0.000561"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:24:35.876569" elapsed="0.000852"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:24:35.876426" elapsed="0.001033"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:24:35.876117" elapsed="0.001408"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:35.849864" elapsed="0.027703"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.880776" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:35.880494" elapsed="0.000307"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:24:35.880888" elapsed="0.000029"/>
</return>
<msg time="2026-10-06T01:24:35.881016" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:24:35.880177" elapsed="0.000862"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.882190" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:35.881968" elapsed="0.000263"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.882631" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:35.882417" elapsed="0.000253"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:35.896119" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01q8j2dkwra6wr3cwxwejtlypa1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:35.896254" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2407'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"d7ffc991-4f98-4b3e-a4ef-ee88c416571f","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"f0619ae3-b048-4f2c-997d-a1630fead11a","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"5ad100d8-f99e-45e4-8019-06d5905d7559","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"92:c9:ff:d7:3e:4b","ovsdb:ofport":65534,"ovsdb:ifindex":8}],"ovsdb:datapath-id":"00:00:92:c9:ff:d7:3e:4b"},{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":59306,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1']"}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:24:35.896355" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:35.882992" elapsed="0.013388"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.882747" elapsed="0.013672"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:35.896593" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:35.896443" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.882730" elapsed="0.013941"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.898006" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"d7ffc991-4f98-4b3e-a4ef-ee88c416571f","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"f0619ae3-b048-4f2c-997d-a1630fead11a","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"5ad100d8-f99e-45e4-8019-06d5905d7559","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"92:c9:ff:d7:3e:4b","ovsdb:ofport":65534,"ovsdb:ifindex":8}],"ovsdb:datapath-id":"00:00:92:c9:ff:d7:3e:4b"},{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":59306,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1']"}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:35.897614" elapsed="0.000450"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.897377" elapsed="0.000745"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.897360" elapsed="0.000786"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.898739" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:35.898441" elapsed="0.000342"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.898199" elapsed="0.000615"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.898183" elapsed="0.000653"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.899520" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:35.899021" elapsed="0.000525"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:35.899832" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:35.899610" elapsed="0.000289"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.900353" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:35.900085" elapsed="0.000293"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.899925" elapsed="0.000486"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.899594" elapsed="0.000837"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.900975" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:35.900600" elapsed="0.000401"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:35.901269" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:35.901066" elapsed="0.000255"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.901784" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:35.901505" elapsed="0.000303"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.901344" elapsed="0.000496"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.901049" elapsed="0.000812"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:35.902018" elapsed="0.000294"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:24:35.902700" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:35.902467" elapsed="0.000259"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:24:35.902885" elapsed="0.000211"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:24:35.897039" elapsed="0.006113"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:24:35.903295" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:35.903214" elapsed="0.000136"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.903197" elapsed="0.000175"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:35.903511" elapsed="0.000019"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:24:35.903573" elapsed="0.000013"/>
</return>
<msg time="2026-10-06T01:24:35.903836" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:24:35.881333" elapsed="0.022530"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:24:35.903925" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:24:35.904049" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:24:35.879746" elapsed="0.024327"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.905092" level="INFO">Item found from container 5 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:24:35.904773" elapsed="0.000390"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:24:35.904600" elapsed="0.000599"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:24:35.904498" elapsed="0.000728"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:24:35.904276" elapsed="0.000998"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:35.877696" elapsed="0.027643"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.907861" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:35.907576" elapsed="0.000322"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:24:35.907944" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:24:35.908066" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:24:35.907254" elapsed="0.000835"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.909234" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:35.909015" elapsed="0.000261"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.909689" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:35.909461" elapsed="0.000270"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:35.922620" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01iz04a3k2d6itg7w98bvdcezy1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:35.922785" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2407'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"d7ffc991-4f98-4b3e-a4ef-ee88c416571f","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"f0619ae3-b048-4f2c-997d-a1630fead11a","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"5ad100d8-f99e-45e4-8019-06d5905d7559","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"92:c9:ff:d7:3e:4b","ovsdb:ofport":65534,"ovsdb:ifindex":8}],"ovsdb:datapath-id":"00:00:92:c9:ff:d7:3e:4b"},{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":59306,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1']"}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:24:35.922905" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:35.910038" elapsed="0.012892"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.909794" elapsed="0.013175"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:35.923144" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:35.922993" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.909776" elapsed="0.013446"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.924654" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"d7ffc991-4f98-4b3e-a4ef-ee88c416571f","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"f0619ae3-b048-4f2c-997d-a1630fead11a","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"5ad100d8-f99e-45e4-8019-06d5905d7559","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"92:c9:ff:d7:3e:4b","ovsdb:ofport":65534,"ovsdb:ifindex":8}],"ovsdb:datapath-id":"00:00:92:c9:ff:d7:3e:4b"},{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":59306,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1']"}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:35.924151" elapsed="0.000611"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.923914" elapsed="0.000883"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.923896" elapsed="0.000924"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.925401" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:35.925131" elapsed="0.000312"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.924890" elapsed="0.000585"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.924857" elapsed="0.000641"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.926039" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:35.925667" elapsed="0.000398"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:35.926335" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:35.926130" elapsed="0.000257"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.926849" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:35.926567" elapsed="0.000319"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.926410" elapsed="0.000510"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.926113" elapsed="0.000828"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.927448" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:35.927110" elapsed="0.000364"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:35.927758" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:35.927538" elapsed="0.000274"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.928266" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:35.928004" elapsed="0.000287"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:35.927835" elapsed="0.000489"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.927522" elapsed="0.000823"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:35.928485" elapsed="0.000310"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:24:35.929187" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:35.928966" elapsed="0.000246"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:24:35.929359" elapsed="0.000207"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:24:35.923542" elapsed="0.006080"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:24:35.929782" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:35.929698" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.929667" elapsed="0.000192"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:35.930011" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:24:35.930073" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:24:35.930319" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:24:35.908383" elapsed="0.021962"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:24:35.930390" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:24:35.930511" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:24:35.906835" elapsed="0.023700"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.931551" level="INFO">Item found from container 5 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:24:35.931248" elapsed="0.000375"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:24:35.931093" elapsed="0.000565"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:24:35.930992" elapsed="0.000716"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:24:35.930752" elapsed="0.001015"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:35.905424" elapsed="0.026407"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:35.849712" elapsed="0.082147"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:24:35.847001" elapsed="0.084919"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:24:35.842799" elapsed="0.089168"/>
</kw>
<doc>Create bridge br-s1 using OVS command and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:24:34.984767" elapsed="0.947255"/>
</kw>
<doc>Create bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="PASS" start="2026-10-06T01:24:34.603088" elapsed="1.329041"/>
</test>
<test id="s1-s1-s2-t5" name="Add Port Manually and Verify Before Fail" line="39">
<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-10-06T01:24:35.933762" elapsed="0.000212"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:24:35.933500" elapsed="0.000524"/>
</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-10-06T01:24:35.935361" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:35.935274" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.935255" elapsed="0.000170"/>
</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-10-06T01:24:35.937540" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:35.937440" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.937422" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.938556" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:35.938228" elapsed="0.000355"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:35.939082" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:35.938749" elapsed="0.000358"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:35.939149" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:24:35.939277" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:35.937850" elapsed="0.001450"/>
</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-10-06T01:24:35.941770" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:35.941655" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.941637" elapsed="0.000197"/>
</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-10-06T01:24:35.942967" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:35.942882" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:35.942853" elapsed="0.000176"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:35.943393" level="INFO">${karaf_connection_index} = 222</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-10-06T01:24:35.943170" elapsed="0.000248"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:35.943768" 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-10-06T01:24:35.943577" elapsed="0.000215"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:35.977213" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:35.944376" elapsed="0.033020"/>
</kw>
<msg time="2026-10-06T01:24:35.977560" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:35.977603" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:35.943957" elapsed="0.033679"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:36.049865" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:35.978284" elapsed="0.071766"/>
</kw>
<msg time="2026-10-06T01:24:36.050240" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:36.050282" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:35.977834" elapsed="0.072482"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.050594" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.050386" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.050368" elapsed="0.000349"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.051249" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.050908" elapsed="0.000421"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.051589" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.051391" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.051374" elapsed="0.000322"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:36.051729" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:36.054214" elapsed="0.000504"/>
</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-10-06T01:24:36.055986" elapsed="0.000594"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:36.057803" elapsed="0.000342"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:36.052506" elapsed="0.005705"/>
</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-10-06T01:24:36.052009" elapsed="0.006320"/>
</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="PASS" start="2026-10-06T01:24:35.942582" elapsed="0.115822"/>
</kw>
<msg time="2026-10-06T01:24:36.058486" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:36.058525" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:35.941992" elapsed="0.116566"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:36.058729" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:36.058628" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.058610" elapsed="0.000197"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:24:36.059135" elapsed="0.000024"/>
</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-10-06T01:24:36.059428" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:36.059492" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:24:35.941356" elapsed="0.118220"/>
</kw>
<msg time="2026-10-06T01:24:36.059660" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:36.059727" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:35.939628" elapsed="0.120134"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.060062" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.059831" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.059815" elapsed="0.000318"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:35.939487" elapsed="0.120667"/>
</iter>
<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-10-06T01:24:36.062553" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:36.062468" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.062450" elapsed="0.000165"/>
</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-10-06T01:24:36.064076" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:36.063984" elapsed="0.000134"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.063657" elapsed="0.000482"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:36.064510" level="INFO">${karaf_connection_index} = 224</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-10-06T01:24:36.064283" elapsed="0.000251"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:36.064898" 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-10-06T01:24:36.064709" elapsed="0.000214"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:36.100430" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:36.065487" elapsed="0.035116"/>
</kw>
<msg time="2026-10-06T01:24:36.100780" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:36.100822" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:36.065076" elapsed="0.035780"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:36.179931" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:36.101447" elapsed="0.078656"/>
</kw>
<msg time="2026-10-06T01:24:36.180256" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:36.180297" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:36.101031" elapsed="0.079301"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.180603" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.180401" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.180383" elapsed="0.000335"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.181254" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.180917" elapsed="0.000416"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.181590" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.181394" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.181377" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:36.181737" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:36.184201" elapsed="0.000494"/>
</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-10-06T01:24:36.185944" elapsed="0.000458"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:36.187554" elapsed="0.000672"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:36.182503" elapsed="0.005790"/>
</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-10-06T01:24:36.182014" elapsed="0.006394"/>
</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="PASS" start="2026-10-06T01:24:36.063379" elapsed="0.125105"/>
</kw>
<msg time="2026-10-06T01:24:36.188567" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:36.188606" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:36.062781" elapsed="0.125859"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:36.188815" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:36.188728" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.188710" elapsed="0.000195"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.189218" elapsed="0.000023"/>
</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-10-06T01:24:36.189553" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:36.189618" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:24:36.062173" elapsed="0.127613"/>
</kw>
<msg time="2026-10-06T01:24:36.189882" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:36.189923" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:36.060396" elapsed="0.129560"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.190241" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.190024" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.190009" elapsed="0.000303"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:36.060261" elapsed="0.130072"/>
</iter>
<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-10-06T01:24:36.192668" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:36.192579" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.192562" elapsed="0.000189"/>
</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-10-06T01:24:36.193848" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:36.193759" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.193742" elapsed="0.000182"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:36.194286" level="INFO">${karaf_connection_index} = 226</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-10-06T01:24:36.194065" elapsed="0.000245"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:36.194637" 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-10-06T01:24:36.194468" elapsed="0.000192"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:36.229448" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:36.195251" elapsed="0.034507"/>
</kw>
<msg time="2026-10-06T01:24:36.230025" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:36.230069" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:36.194829" elapsed="0.035275"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:36.304327" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:36.231001" elapsed="0.073525"/>
</kw>
<msg time="2026-10-06T01:24:36.304710" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:36.304753" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:36.230384" elapsed="0.074403"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.305150" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.304900" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.304858" elapsed="0.000394"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.305815" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.305440" elapsed="0.000472"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.306176" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.305975" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.305958" elapsed="0.000312"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:36.306308" elapsed="0.000044"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:36.309131" elapsed="0.000506"/>
</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-10-06T01:24:36.310947" elapsed="0.000502"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:36.312671" elapsed="0.000718"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:36.307342" elapsed="0.006118"/>
</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-10-06T01:24:36.306771" elapsed="0.006809"/>
</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="PASS" start="2026-10-06T01:24:36.193476" elapsed="0.120183"/>
</kw>
<msg time="2026-10-06T01:24:36.313763" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:36.313802" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:36.192912" elapsed="0.120924"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:36.314008" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:36.313920" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.313902" elapsed="0.000186"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.314431" elapsed="0.000025"/>
</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-10-06T01:24:36.314896" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:36.314964" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:36.192285" elapsed="0.122767"/>
</kw>
<msg time="2026-10-06T01:24:36.315139" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:36.315179" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:36.190572" elapsed="0.124640"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.315509" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.315283" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.315266" elapsed="0.000315"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:36.190438" elapsed="0.125165"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:35.939346" elapsed="0.376291"/>
</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-10-06T01:24:35.937134" elapsed="0.378581"/>
</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-10-06T01:24:35.935016" elapsed="0.380758"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:35.934326" elapsed="0.381495"/>
</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-10-06T01:24:35.933140" elapsed="0.382750"/>
</kw>
<kw name="Add Sample Port To The Manual Bridge And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.319473" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.319228" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.319210" elapsed="0.000338"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:36.319908" 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-10-06T01:24:36.320005" 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-10-06T01:24:36.319757" elapsed="0.000272"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.320505" level="INFO">Attempting to execute command "sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan" on remote system "10.30.170.234" 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-10-06T01:24:36.320217" elapsed="0.000368"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:36.321097" level="INFO">${conn_id} = 258</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-10-06T01:24:36.320776" elapsed="0.000346"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.321984" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:24:36.322056" 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-10-06T01:24:36.321693" elapsed="0.000385"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:36.322226" elapsed="0.000289"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:24:36.323316" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:24:36.739553" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:24:35 UTC 2026

  System load:  0.06               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:24:35 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:24:36.323082" elapsed="0.416555"/>
</kw>
<msg time="2026-10-06T01:24:36.739716" 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-10-06T01:24:36.322700" elapsed="0.417082"/>
</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-10-06T01:24:36.321316" elapsed="0.418550"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:24:36.740244" level="INFO">Executing command 'sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan'.</msg>
<msg time="2026-10-06T01:24:36.783422" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:24:36.783560" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:24:36.783616" level="INFO">${stderr} = ovs-vsctl: Error detected while setting up 'vx1': vx1: vxlan type requires valid 'remote_ip' argument.  See ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/var/log/openvswitch"...</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-10-06T01:24:36.740084" elapsed="0.043564"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:36.783906" elapsed="0.000289"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.785121" level="INFO">ovs-vsctl: Error detected while setting up 'vx1': vx1: vxlan type requires valid 'remote_ip' argument.  See ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/var/log/openvswitch".</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.784524" elapsed="0.000693"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:24:36.785569" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:36.785363" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.785320" elapsed="0.000425"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:24:36.786070" elapsed="0.000054"/>
</return>
<status status="PASS" start="2026-10-06T01:24:36.785859" elapsed="0.000332"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.785823" elapsed="0.000416"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:24:36.786306" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:36.787904" elapsed="0.000632"/>
</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-10-06T01:24:36.788995" elapsed="0.000305"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:36.789612" elapsed="0.000231"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:36.786974" elapsed="0.003001"/>
</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-10-06T01:24:36.318783" elapsed="0.471347"/>
</kw>
<msg time="2026-10-06T01:24:36.790234" 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-10-06T01:24:36.318247" elapsed="0.472087"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:24:36.317792" elapsed="0.472791"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.791767" level="INFO">${dictionary_operational} = {'vx1': '2'}</msg>
<var>${dictionary_operational}</var>
<arg>vx1=2</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:24:36.791068" elapsed="0.000755"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.792936" level="INFO">${dictionary_config} = {'vx1': '0'}</msg>
<var>${dictionary_config}</var>
<arg>vx1=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:24:36.792266" elapsed="0.000726"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.803103" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:36.802296" elapsed="0.000864"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.804163" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:36.803494" elapsed="0.000723"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:36.804307" elapsed="0.000060"/>
</return>
<msg time="2026-10-06T01:24:36.804601" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:36.801424" elapsed="0.003211"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.808371" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:24:36.807990" elapsed="0.000417"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:24:36.808464" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:24:36.808634" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:24:36.807487" elapsed="0.001179"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.810335" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.810025" elapsed="0.000368"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.811227" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.810653" elapsed="0.000632"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:36.819492" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:36.819736" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '144'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:24:36.819866" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:36.811713" elapsed="0.008207"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.811373" elapsed="0.008602"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.820224" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.820009" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.811348" elapsed="0.008986"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.822182" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.821668" elapsed="0.000578"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.821328" elapsed="0.000961"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.821303" elapsed="0.001018"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.823142" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.822743" elapsed="0.000458"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.822393" elapsed="0.000852"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.822371" elapsed="0.000905"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.824483" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:36.823514" elapsed="0.001005"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.824986" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.824657" elapsed="0.000405"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.825704" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:36.825312" elapsed="0.000428"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.825093" elapsed="0.000692"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.824632" elapsed="0.001182"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.826536" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:36.826062" elapsed="0.000509"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.826983" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.826661" elapsed="0.000395"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.827671" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:36.827302" elapsed="0.000426"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.827088" elapsed="0.000686"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.826637" elapsed="0.001165"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:36.828014" elapsed="0.000412"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:24:36.829016" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:36.828647" elapsed="0.000404"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:24:36.829260" elapsed="0.000306"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:24:36.820828" elapsed="0.008816"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:24:36.829870" elapsed="0.000052"/>
</return>
<status status="PASS" start="2026-10-06T01:24:36.829754" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.829729" elapsed="0.000268"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.830191" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:24:36.830280" elapsed="0.000019"/>
</return>
<msg time="2026-10-06T01:24:36.830583" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:24:36.809132" elapsed="0.021489"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:24:36.830705" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:24:36.830896" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:24:36.806906" elapsed="0.024026"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.832378" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:24:36.831935" elapsed="0.000696"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:24:36.831673" elapsed="0.001031"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:24:36.831529" elapsed="0.001215"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:24:36.831219" elapsed="0.001593"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:36.804910" elapsed="0.027945"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.838666" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:36.838285" elapsed="0.000440"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:24:36.838786" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:24:36.838980" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:24:36.837816" elapsed="0.001196"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.840618" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.840309" elapsed="0.000444"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.841344" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.841033" elapsed="0.000366"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:36.852634" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01q8j2dkwra6wr3cwxwejtlypa1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:36.852807" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:24:36.852959" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:36.841821" elapsed="0.011172"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.841485" elapsed="0.011563"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.853292" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.853082" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.841462" elapsed="0.011941"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.855181" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.854706" elapsed="0.000535"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.854356" elapsed="0.000930"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.854332" elapsed="0.000986"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.856223" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.855788" elapsed="0.000492"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.855388" elapsed="0.000936"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.855367" elapsed="0.000987"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.857108" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:36.856588" elapsed="0.000554"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.857515" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.857233" elapsed="0.000355"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.858244" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:36.857858" elapsed="0.000420"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.857619" elapsed="0.000705"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.857210" elapsed="0.001141"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.859100" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:36.858590" elapsed="0.000545"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.859505" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.859225" elapsed="0.000352"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.860226" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:36.859844" elapsed="0.000416"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.859607" elapsed="0.000698"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.859202" elapsed="0.001130"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:36.860524" elapsed="0.000446"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:24:36.861491" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:36.861188" elapsed="0.000336"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:24:36.861751" elapsed="0.000311"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:24:36.853868" elapsed="0.008273"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:24:36.862340" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:24:36.862227" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.862204" elapsed="0.000287"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.862708" elapsed="0.000029"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:24:36.862799" elapsed="0.000019"/>
</return>
<msg time="2026-10-06T01:24:36.863115" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:24:36.839429" elapsed="0.023722"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:24:36.863215" elapsed="0.000034"/>
</return>
<msg time="2026-10-06T01:24:36.863383" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:24:36.837154" elapsed="0.026261"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.864862" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:24:36.864412" elapsed="0.000550"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:24:36.864191" elapsed="0.000824"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:24:36.864047" elapsed="0.001006"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:24:36.863718" elapsed="0.001402"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:36.832986" elapsed="0.032177"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.868959" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:36.868538" elapsed="0.000457"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:24:36.869055" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:24:36.869227" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:24:36.868091" elapsed="0.001168"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.870899" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.870551" elapsed="0.000407"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.871522" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.871219" elapsed="0.000358"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:36.880899" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01iz04a3k2d6itg7w98bvdcezy1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:36.880999" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:24:36.881090" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:36.872016" elapsed="0.009099"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.871663" elapsed="0.009491"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.881329" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.881179" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.871639" elapsed="0.009768"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.883188" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.882712" elapsed="0.000535"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.882363" elapsed="0.000927"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.882339" elapsed="0.000982"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.884133" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.883737" elapsed="0.000453"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.883390" elapsed="0.000842"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.883369" elapsed="0.000894"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.885013" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:36.884497" elapsed="0.000551"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.885419" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.885137" elapsed="0.000403"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.886209" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:36.885819" elapsed="0.000424"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.885575" elapsed="0.000714"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.885114" elapsed="0.001203"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.887062" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:36.886549" elapsed="0.000548"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.887467" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.887187" elapsed="0.000352"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.888190" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:36.887804" elapsed="0.000420"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.887570" elapsed="0.000700"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.887164" elapsed="0.001134"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:36.888492" elapsed="0.000447"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:24:36.889465" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:36.889158" elapsed="0.000342"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:24:36.889729" elapsed="0.000312"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:24:36.881890" elapsed="0.008230"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:24:36.890318" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:24:36.890206" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.890183" elapsed="0.000243"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.890618" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:24:36.890729" elapsed="0.000021"/>
</return>
<msg time="2026-10-06T01:24:36.891045" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:24:36.869667" elapsed="0.021413"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:24:36.891144" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:24:36.891312" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:24:36.867476" elapsed="0.023869"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.893006" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:24:36.892333" elapsed="0.000757"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:24:36.892115" elapsed="0.001029"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:24:36.891971" elapsed="0.001211"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:24:36.891623" elapsed="0.001624"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:36.865275" elapsed="0.028014"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:36.804728" elapsed="0.088597"/>
</for>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:24:36.800215" elapsed="0.093172"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:24:36.793424" elapsed="0.100027"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.898702" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:36.898360" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.899161" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:36.898890" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:36.899261" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:24:36.899389" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:36.898008" elapsed="0.001404"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.902002" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:24:36.901719" elapsed="0.000308"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:24:36.902069" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:24:36.902190" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:24:36.901388" elapsed="0.000825"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.903371" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.903148" elapsed="0.000268"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.903839" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.903603" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:36.913299" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:36.913460" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '6048'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;d7ffc991-4f98-4b3e-a4ef-ee88c416571f&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;f0619ae3-b048-4f2c-997d-a1630fead11a&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;5ad100d8-f99e-45e4-8019-06d5905d7559&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;92:c9:ff:d7:3e:4b&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vx1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;c3bf5833-3a7e-48df-919b-9470cf8bc510&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vx1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;750cd78a-b195-4964-a28c-9b1cadd9e6dc&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:92:c9:ff:d7:3e:4b&lt;/datapath-id&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:24:36.913653" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:36.904181" elapsed="0.009518"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.903956" elapsed="0.009784"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.913931" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.913764" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.903939" elapsed="0.010071"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.915311" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;d7ffc991-4f98-4b3e-a4ef-ee88c416571f&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;f0619ae3-b048-4f2c-997d-a1630fead11a&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;5ad100d8-f99e-45e4-8019-06d5905d7559&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;92:c9:ff:d7:3e:4b&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vx1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;c3bf5833-3a7e-48df-919b-9470cf8bc510&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vx1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;750cd78a-b195-4964-a28c-9b1cadd9e6dc&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:92:c9:ff:d7:3e:4b&lt;/datapath-id&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.914928" elapsed="0.000525"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.914661" elapsed="0.000825"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.914643" elapsed="0.000866"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.916099" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.915812" elapsed="0.000327"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.915560" elapsed="0.000611"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.915544" elapsed="0.000649"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.916727" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:36.916362" elapsed="0.000390"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.917170" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.916817" elapsed="0.000408"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.917671" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:36.917405" elapsed="0.000306"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.917248" elapsed="0.000497"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.916800" elapsed="0.000966"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.918289" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:36.917948" elapsed="0.000366"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.918581" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.918378" elapsed="0.000256"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.919105" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:36.918829" elapsed="0.000300"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.918657" elapsed="0.000505"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.918361" elapsed="0.000821"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:36.919321" elapsed="0.000298"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:24:36.920028" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:36.919791" elapsed="0.000261"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:24:36.920202" elapsed="0.000209"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:24:36.914324" elapsed="0.006143"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:24:36.920608" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:36.920528" elapsed="0.000136"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.920511" elapsed="0.000191"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.920843" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:24:36.920918" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:24:36.921187" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1&lt;/node-id...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:24:36.902510" elapsed="0.018705"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:24:36.921261" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:24:36.921382" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1&lt;/node-id...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:24:36.900980" elapsed="0.020427"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.922432" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:24:36.922119" elapsed="0.000399"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:24:36.921959" elapsed="0.000594"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:24:36.921845" elapsed="0.000735"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:24:36.921607" elapsed="0.001020"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:36.899563" elapsed="0.023142"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.925225" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:36.924955" elapsed="0.000295"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:24:36.925291" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:24:36.925414" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:24:36.924606" elapsed="0.000831"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.926583" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.926364" elapsed="0.000260"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.927063" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.926827" elapsed="0.000277"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:36.939658" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01q8j2dkwra6wr3cwxwejtlypa1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:36.939833" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2678'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"d7ffc991-4f98-4b3e-a4ef-ee88c416571f","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"f0619ae3-b048-4f2c-997d-a1630fead11a","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"5ad100d8-f99e-45e4-8019-06d5905d7559","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"92:c9:ff:d7:3e:4b","ovsdb:ofport":65534,"ovsdb:ifindex":8},{"tp-id":"vx1","ovsdb:port-uuid":"c3bf5833-3a7e-48df-919b-9470cf8bc510","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"750cd78a-b195-4964-a28c-9b1cadd9e6dc","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:92:c9:ff:d7:3e:4b"},{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":59306,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1']"}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:24:36.939952" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:36.927391" elapsed="0.012586"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.927165" elapsed="0.012851"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.940192" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.940040" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.927148" elapsed="0.013122"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.941571" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"d7ffc991-4f98-4b3e-a4ef-ee88c416571f","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"f0619ae3-b048-4f2c-997d-a1630fead11a","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"5ad100d8-f99e-45e4-8019-06d5905d7559","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"92:c9:ff:d7:3e:4b","ovsdb:ofport":65534,"ovsdb:ifindex":8},{"tp-id":"vx1","ovsdb:port-uuid":"c3bf5833-3a7e-48df-919b-9470cf8bc510","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"750cd78a-b195-4964-a28c-9b1cadd9e6dc","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:92:c9:ff:d7:3e:4b"},{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":59306,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1']"}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.941197" elapsed="0.000471"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.940955" elapsed="0.000762"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.940937" elapsed="0.000804"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.942467" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.942044" elapsed="0.000466"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.941793" elapsed="0.000749"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.941778" elapsed="0.000788"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.943119" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:36.942753" elapsed="0.000391"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.943414" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.943209" elapsed="0.000259"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.943942" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:36.943646" elapsed="0.000321"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.943491" elapsed="0.000510"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.943193" elapsed="0.000828"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.944540" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:36.944193" elapsed="0.000372"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.944851" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.944629" elapsed="0.000289"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.945361" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:36.945097" elapsed="0.000288"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.944941" elapsed="0.000477"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.944613" elapsed="0.000825"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:36.945577" elapsed="0.000324"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:24:36.946278" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:36.946059" elapsed="0.000244"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:24:36.946451" elapsed="0.000209"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:24:36.940586" elapsed="0.006148"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:24:36.946891" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:24:36.946797" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.946780" elapsed="0.000191"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.947110" elapsed="0.000019"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:24:36.947173" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:24:36.947436" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:24:36.925742" elapsed="0.021720"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:24:36.947508" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:24:36.947630" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:24:36.924198" elapsed="0.023457"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.948791" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:24:36.948464" elapsed="0.000401"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:24:36.948308" elapsed="0.000606"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:24:36.948205" elapsed="0.000736"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:24:36.947980" elapsed="0.001009"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:36.922788" elapsed="0.026267"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.951572" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:36.951299" elapsed="0.000298"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:24:36.951639" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:24:36.951781" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:24:36.950979" elapsed="0.000826"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.952967" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.952731" elapsed="0.000279"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.953414" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.953196" elapsed="0.000258"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:36.967037" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01iz04a3k2d6itg7w98bvdcezy1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:36.967185" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2678'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"d7ffc991-4f98-4b3e-a4ef-ee88c416571f","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"f0619ae3-b048-4f2c-997d-a1630fead11a","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"5ad100d8-f99e-45e4-8019-06d5905d7559","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"92:c9:ff:d7:3e:4b","ovsdb:ofport":65534,"ovsdb:ifindex":8},{"tp-id":"vx1","ovsdb:port-uuid":"c3bf5833-3a7e-48df-919b-9470cf8bc510","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"750cd78a-b195-4964-a28c-9b1cadd9e6dc","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:92:c9:ff:d7:3e:4b"},{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":59306,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1']"}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:24:36.967289" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:36.953754" elapsed="0.013560"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.953515" elapsed="0.013837"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.967531" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.967377" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.953498" elapsed="0.014112"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.969108" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"d7ffc991-4f98-4b3e-a4ef-ee88c416571f","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"f0619ae3-b048-4f2c-997d-a1630fead11a","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"5ad100d8-f99e-45e4-8019-06d5905d7559","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"92:c9:ff:d7:3e:4b","ovsdb:ofport":65534,"ovsdb:ifindex":8},{"tp-id":"vx1","ovsdb:port-uuid":"c3bf5833-3a7e-48df-919b-9470cf8bc510","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"750cd78a-b195-4964-a28c-9b1cadd9e6dc","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:92:c9:ff:d7:3e:4b"},{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":59306,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1']"}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.968545" elapsed="0.000659"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.968302" elapsed="0.000935"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.968285" elapsed="0.000975"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.969842" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:36.969552" elapsed="0.000344"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.969312" elapsed="0.000616"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.969297" elapsed="0.000654"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.970464" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:36.970120" elapsed="0.000372"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.970776" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.970558" elapsed="0.000271"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.971283" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:36.971020" elapsed="0.000288"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.970851" elapsed="0.000489"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.970542" elapsed="0.000818"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.971896" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:36.971527" elapsed="0.000396"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.972188" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:36.971987" elapsed="0.000253"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.972693" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:36.972417" elapsed="0.000302"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:36.972262" elapsed="0.000489"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.971970" elapsed="0.000801"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:36.972926" elapsed="0.000294"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:24:36.973600" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:36.973375" elapsed="0.000250"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:24:36.973788" elapsed="0.000225"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:24:36.967962" elapsed="0.006106"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:24:36.974210" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:36.974130" elapsed="0.000136"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.974113" elapsed="0.000175"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:36.974425" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:24:36.974487" elapsed="0.000015"/>
</return>
<msg time="2026-10-06T01:24:36.974769" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:24:36.952111" elapsed="0.022685"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:24:36.974841" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:24:36.974981" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:24:36.950535" elapsed="0.024470"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.976021" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:24:36.975702" elapsed="0.000392"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:24:36.975530" elapsed="0.000600"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:24:36.975428" elapsed="0.000729"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:24:36.975207" elapsed="0.000997"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:36.949137" elapsed="0.027130"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:36.899457" elapsed="0.076837"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:24:36.897506" elapsed="0.078835"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:24:36.893750" elapsed="0.082637"/>
</kw>
<doc>Add Port vx1 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:24:36.317391" elapsed="0.659052"/>
</kw>
<doc>Add port with OVS command and verify it gets applied from all instances.</doc>
<status status="PASS" start="2026-10-06T01:24:35.932539" elapsed="1.044014"/>
</test>
<test id="s1-s1-s2-t6" name="Delete the Bridge Manually and Verify Before Fail" line="43">
<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-10-06T01:24:36.978371" elapsed="0.000546"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:24:36.978125" elapsed="0.000856"/>
</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-10-06T01:24:36.980011" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:36.979800" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.979782" elapsed="0.000304"/>
</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-10-06T01:24:36.982120" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:36.982036" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.982019" elapsed="0.000164"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.983102" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:36.982757" elapsed="0.000371"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:36.983545" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:36.983276" elapsed="0.000294"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:36.983609" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:24:36.983753" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:36.982384" elapsed="0.001393"/>
</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-10-06T01:24:36.986202" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:36.986117" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.986099" elapsed="0.000167"/>
</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-10-06T01:24:36.987380" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:36.987296" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:36.987278" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:36.987837" level="INFO">${karaf_connection_index} = 222</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-10-06T01:24:36.987585" elapsed="0.000276"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:36.988222" 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-10-06T01:24:36.988045" elapsed="0.000201"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:37.022305" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:36.988830" elapsed="0.033654"/>
</kw>
<msg time="2026-10-06T01:24:37.022644" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:37.022710" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:36.988401" elapsed="0.034345"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:37.095305" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:37.023352" elapsed="0.072142"/>
</kw>
<msg time="2026-10-06T01:24:37.095715" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:37.095760" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:37.022927" elapsed="0.072867"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:37.096099" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:37.095868" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.095848" elapsed="0.000347"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.096741" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:37.096373" elapsed="0.000451"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:37.097098" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:37.096897" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.096869" elapsed="0.000323"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:37.097223" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:37.099738" elapsed="0.000499"/>
</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-10-06T01:24:37.101481" elapsed="0.000623"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:37.103316" elapsed="0.000316"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:37.098028" elapsed="0.005936"/>
</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-10-06T01:24:37.097490" elapsed="0.006597"/>
</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="PASS" start="2026-10-06T01:24:36.987037" elapsed="0.117127"/>
</kw>
<msg time="2026-10-06T01:24:37.104247" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:37.104287" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:36.986414" elapsed="0.117907"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:37.104476" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:37.104391" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.104373" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:24:37.104918" elapsed="0.000024"/>
</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-10-06T01:24:37.105216" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:37.105281" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:24:36.985813" elapsed="0.119552"/>
</kw>
<msg time="2026-10-06T01:24:37.105447" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:37.105486" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:36.984116" elapsed="0.121403"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:37.105933" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:37.105586" elapsed="0.000399"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.105570" elapsed="0.000437"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:36.983976" elapsed="0.122052"/>
</iter>
<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-10-06T01:24:37.108375" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:37.108289" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.108272" elapsed="0.000166"/>
</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-10-06T01:24:37.109586" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:37.109501" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.109485" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:37.110058" level="INFO">${karaf_connection_index} = 224</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-10-06T01:24:37.109817" elapsed="0.000266"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:37.110414" 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-10-06T01:24:37.110243" elapsed="0.000195"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:37.147799" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:37.111042" elapsed="0.036961"/>
</kw>
<msg time="2026-10-06T01:24:37.148164" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:37.148205" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:37.110592" elapsed="0.037646"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:37.232891" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:37.148845" elapsed="0.084227"/>
</kw>
<msg time="2026-10-06T01:24:37.233228" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:37.233269" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:37.148403" elapsed="0.084899"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:37.233574" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:37.233373" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.233355" elapsed="0.000315"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.234229" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:37.233890" elapsed="0.000421"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:37.234567" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:37.234371" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.234355" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:37.234708" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:37.237199" elapsed="0.000503"/>
</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-10-06T01:24:37.239134" elapsed="0.000455"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:37.240965" elapsed="0.000448"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:37.235487" elapsed="0.005995"/>
</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-10-06T01:24:37.234990" elapsed="0.006610"/>
</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="PASS" start="2026-10-06T01:24:37.109235" elapsed="0.132511"/>
</kw>
<msg time="2026-10-06T01:24:37.241835" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:37.241892" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:37.108584" elapsed="0.133343"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:37.242082" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:37.241998" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.241980" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:37.242508" elapsed="0.000024"/>
</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-10-06T01:24:37.242824" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:37.242905" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:37.108001" elapsed="0.134990"/>
</kw>
<msg time="2026-10-06T01:24:37.243075" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:37.243114" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:37.106275" elapsed="0.136872"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:37.243430" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:37.243215" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.243199" elapsed="0.000302"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:37.106138" elapsed="0.137383"/>
</iter>
<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-10-06T01:24:37.245980" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:37.245894" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.245863" elapsed="0.000180"/>
</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-10-06T01:24:37.247139" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:37.247054" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.247037" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:37.247566" level="INFO">${karaf_connection_index} = 226</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-10-06T01:24:37.247341" elapsed="0.000249"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:37.247956" 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-10-06T01:24:37.247767" elapsed="0.000213"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:37.284230" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:37.248543" elapsed="0.035877"/>
</kw>
<msg time="2026-10-06T01:24:37.284575" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:37.284616" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:37.248133" elapsed="0.036516"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:37.392223" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:37.285271" elapsed="0.107138"/>
</kw>
<msg time="2026-10-06T01:24:37.392569" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:37.392609" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:37.284839" elapsed="0.107805"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:37.392955" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:37.392735" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.392716" elapsed="0.000335"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.393569" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:37.393229" elapsed="0.000424"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:37.393945" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:37.393732" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.393714" elapsed="0.000358"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:37.394103" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:37.396558" elapsed="0.000519"/>
</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-10-06T01:24:37.398285" elapsed="0.000465"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:37.400284" elapsed="0.000460"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:37.394888" elapsed="0.005925"/>
</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-10-06T01:24:37.394363" elapsed="0.006586"/>
</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="PASS" start="2026-10-06T01:24:37.246781" elapsed="0.154245"/>
</kw>
<msg time="2026-10-06T01:24:37.401107" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:37.401146" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:37.246187" elapsed="0.154995"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:37.401335" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:37.401251" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.401234" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:37.401770" elapsed="0.000024"/>
</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-10-06T01:24:37.402086" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:37.402152" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:24:37.245574" elapsed="0.156663"/>
</kw>
<msg time="2026-10-06T01:24:37.402319" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:37.402358" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:37.243888" elapsed="0.158505"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:37.402714" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:37.402460" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.402444" elapsed="0.000344"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:37.243627" elapsed="0.159182"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:36.983823" elapsed="0.419012"/>
</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-10-06T01:24:36.981726" elapsed="0.421173"/>
</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-10-06T01:24:36.979528" elapsed="0.423422"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:36.979131" elapsed="0.423860"/>
</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-10-06T01:24:36.977765" elapsed="0.425272"/>
</kw>
<kw name="Delete Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:37.406470" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:37.406239" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.406222" elapsed="0.000327"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:37.406890" 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-10-06T01:24:37.406984" 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-10-06T01:24:37.406753" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.407519" level="INFO">Attempting to execute command "sudo ovs-vsctl del-br br-s1" on remote system "10.30.170.234" 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-10-06T01:24:37.407231" elapsed="0.000330"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:37.408065" level="INFO">${conn_id} = 263</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-10-06T01:24:37.407751" elapsed="0.000338"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.408914" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:24:37.408984" 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-10-06T01:24:37.408635" elapsed="0.000371"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:37.409151" elapsed="0.000279"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:24:37.410212" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:24:37.800721" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:24:35 UTC 2026

  System load:  0.06               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:24:36 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:24:37.409983" elapsed="0.390821"/>
</kw>
<msg time="2026-10-06T01:24:37.800862" 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-10-06T01:24:37.409594" elapsed="0.391343"/>
</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-10-06T01:24:37.408283" elapsed="0.392739"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:24:37.801379" level="INFO">Executing command 'sudo ovs-vsctl del-br br-s1'.</msg>
<msg time="2026-10-06T01:24:37.884398" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:24:37.884622" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:24:37.884750" level="INFO">${stderr} = </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-10-06T01:24:37.801224" elapsed="0.083577"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:37.885195" elapsed="0.000421"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.886735" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:37.886181" elapsed="0.000644"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:24:37.887202" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:37.886996" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.886953" elapsed="0.000390"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:24:37.887626" elapsed="0.000085"/>
</return>
<status status="PASS" start="2026-10-06T01:24:37.887448" elapsed="0.000332"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.887417" elapsed="0.000414"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:24:37.887919" elapsed="0.000031"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:37.889448" elapsed="0.000688"/>
</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-10-06T01:24:37.890539" elapsed="0.000415"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:37.891269" elapsed="0.000196"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:37.888535" elapsed="0.003033"/>
</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-10-06T01:24:37.405809" elapsed="0.485944"/>
</kw>
<msg time="2026-10-06T01:24:37.891861" 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-10-06T01:24:37.405287" elapsed="0.486697"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl del-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:24:37.404861" elapsed="0.487365"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.893367" level="INFO">${dictionary} = {'br-s1': '0'}</msg>
<var>${dictionary}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:24:37.892651" elapsed="0.000771"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.900624" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:37.899871" elapsed="0.000839"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.901670" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:37.901068" elapsed="0.000689"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:37.901849" elapsed="0.000083"/>
</return>
<msg time="2026-10-06T01:24:37.902157" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:37.899044" elapsed="0.003164"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.908145" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:24:37.907486" elapsed="0.000715"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:24:37.908293" elapsed="0.000057"/>
</return>
<msg time="2026-10-06T01:24:37.908562" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:24:37.906727" elapsed="0.001885"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.911314" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:37.910797" elapsed="0.000609"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.912356" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:37.911848" elapsed="0.000596"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:37.923812" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:37.924209" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3371'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:24:37.924558" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:37.913496" elapsed="0.011118"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:37.912978" elapsed="0.011760"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:37.925166" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:37.924796" elapsed="0.000504"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.912542" elapsed="0.012804"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.928377" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:37.927480" elapsed="0.001081"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:37.926950" elapsed="0.001684"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.926908" elapsed="0.001809"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.930050" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:37.929387" elapsed="0.000757"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:37.928835" elapsed="0.001379"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.928801" elapsed="0.001465"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.931494" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:37.930646" elapsed="0.000905"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:37.932207" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:37.931725" elapsed="0.000599"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.933368" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:37.932752" elapsed="0.000670"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:37.932374" elapsed="0.001121"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.931655" elapsed="0.001885"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.934758" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:37.933970" elapsed="0.000845"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:37.935429" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:37.934978" elapsed="0.000625"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.936664" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:37.936065" elapsed="0.000685"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:37.935658" elapsed="0.001166"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.934940" elapsed="0.001929"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:37.937197" elapsed="0.000712"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:24:37.938812" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:37.938262" elapsed="0.000605"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:24:37.939228" elapsed="0.000507"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:24:37.926126" elapsed="0.013735"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:24:37.940207" elapsed="0.000055"/>
</return>
<status status="PASS" start="2026-10-06T01:24:37.940024" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.939985" elapsed="0.000399"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:37.940726" elapsed="0.000048"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:24:37.940871" elapsed="0.000104"/>
</return>
<msg time="2026-10-06T01:24:37.941529" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:24:37.909335" elapsed="0.032255"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:24:37.941726" elapsed="0.000059"/>
</return>
<msg time="2026-10-06T01:24:37.942024" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:24:37.905748" elapsed="0.036334"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.944141" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:24:37.943694" elapsed="0.000561"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:24:37.943310" elapsed="0.000995"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:24:37.943082" elapsed="0.001261"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:24:37.942530" elapsed="0.001878"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:37.902555" elapsed="0.041895"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.949759" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:37.949361" elapsed="0.000434"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:24:37.949853" elapsed="0.000055"/>
</return>
<msg time="2026-10-06T01:24:37.950046" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:24:37.948912" elapsed="0.001166"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.951701" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:37.951368" elapsed="0.000394"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.952344" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:37.952036" elapsed="0.000363"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:37.965966" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01q8j2dkwra6wr3cwxwejtlypa1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:37.966132" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '1397'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":59306,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:24:37.966317" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:37.952857" elapsed="0.013495"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:37.952485" elapsed="0.013921"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:37.966649" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:37.966439" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.952461" elapsed="0.014321"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.968564" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":59306,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:37.968081" elapsed="0.000556"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:37.967732" elapsed="0.000970"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.967707" elapsed="0.001029"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.969528" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:37.969154" elapsed="0.000431"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:37.968807" elapsed="0.000822"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.968785" elapsed="0.000875"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.970407" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:37.969931" elapsed="0.000511"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:37.970833" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:37.970531" elapsed="0.000394"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.971539" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:37.971174" elapsed="0.000398"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:37.970957" elapsed="0.000660"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.970508" elapsed="0.001136"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.972378" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:37.971909" elapsed="0.000504"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:37.972807" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:37.972501" elapsed="0.000393"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.973504" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:37.973143" elapsed="0.000395"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:37.972926" elapsed="0.000657"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.972478" elapsed="0.001133"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:37.973822" elapsed="0.000422"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:24:37.974785" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:37.974459" elapsed="0.000359"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:24:37.975041" elapsed="0.000290"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:24:37.967244" elapsed="0.008164"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:24:37.975603" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-10-06T01:24:37.975492" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.975470" elapsed="0.000264"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:37.975948" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:24:37.976078" elapsed="0.000022"/>
</return>
<msg time="2026-10-06T01:24:37.976416" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:24:37.950488" elapsed="0.025964"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:24:37.976515" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:24:37.976714" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:24:37.948295" elapsed="0.028455"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.978173" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:24:37.977736" elapsed="0.000524"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:24:37.977499" elapsed="0.000811"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:24:37.977356" elapsed="0.000992"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:24:37.977048" elapsed="0.001365"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:37.944562" elapsed="0.033893"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.982209" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:37.981814" elapsed="0.000430"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:24:37.982301" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:24:37.982473" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:24:37.981345" elapsed="0.001159"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.984146" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:37.983818" elapsed="0.000386"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:37.984790" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:37.984464" elapsed="0.000383"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:24:38.001979" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01iz04a3k2d6itg7w98bvdcezy1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:24:38.002146" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '1397'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":59306,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:24:38.002289" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:24:37.985263" elapsed="0.017060"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:37.984948" elapsed="0.017429"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.002623" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:38.002412" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:37.984924" elapsed="0.017832"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:38.004557" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":59306,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:38.004079" elapsed="0.000618"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:38.003717" elapsed="0.001028"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.003673" elapsed="0.001104"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:38.005577" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:38.005200" elapsed="0.000434"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:38.004850" elapsed="0.000848"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.004828" elapsed="0.000903"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:38.006466" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:38.005985" elapsed="0.000516"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.006919" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:38.006593" elapsed="0.000404"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:38.007613" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:38.007246" elapsed="0.000400"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:38.007028" elapsed="0.000686"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.006568" elapsed="0.001175"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:24:38.008467" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:38.007996" elapsed="0.000507"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.008914" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:38.008593" elapsed="0.000397"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:24:38.009609" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:24:38.009241" elapsed="0.000402"/>
</kw>
<status status="PASS" start="2026-10-06T01:24:38.009022" elapsed="0.000688"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.008569" elapsed="0.001171"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:38.009952" elapsed="0.000411"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:24:38.010924" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:24:38.010582" elapsed="0.000377"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:24:38.011168" elapsed="0.000289"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:24:38.003222" elapsed="0.008315"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:24:38.011761" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-10-06T01:24:38.011623" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.011600" elapsed="0.000271"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.012081" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:24:38.012169" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:24:38.012506" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:24:37.982955" elapsed="0.029587"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:24:38.012607" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:24:38.012801" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:24:37.980757" elapsed="0.032078"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:24:38.014484" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:24:38.013834" elapsed="0.000743"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:24:38.013592" elapsed="0.001038"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:24:38.013447" elapsed="0.001223"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:24:38.013136" elapsed="0.001625"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:37.978565" elapsed="0.036287"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:37.902314" elapsed="0.112593"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary {'br-s1': '0'}.</doc>
<status status="PASS" start="2026-10-06T01:24:37.897933" elapsed="0.117043"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:24:37.893901" elapsed="0.121142"/>
</kw>
<doc>Delete bridge br-s1 using OVS command and verify it gets applied in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:24:37.404431" elapsed="0.610691"/>
</kw>
<doc>Delete bridge with OVS command and verify it gets deleted from all instances.</doc>
<status status="PASS" start="2026-10-06T01:24:36.977133" elapsed="1.038123"/>
</test>
<test id="s1-s1-s2-t7" name="Create Bridge In Owner and Verify Before Fail" line="47">
<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-10-06T01:24:38.017869" elapsed="0.000299"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:24:38.017349" elapsed="0.000890"/>
</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-10-06T01:24:38.019536" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:38.019373" elapsed="0.000223"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.019349" elapsed="0.000276"/>
</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-10-06T01:24:38.022369" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:38.022179" elapsed="0.000249"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.022156" elapsed="0.000301"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:38.023755" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:38.023283" elapsed="0.000509"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:38.024396" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:38.024019" elapsed="0.000410"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:38.024485" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:24:38.024658" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:38.022765" elapsed="0.001945"/>
</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-10-06T01:24:38.028368" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:38.028249" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.028224" elapsed="0.000233"/>
</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-10-06T01:24:38.030056" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:38.029937" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.029912" elapsed="0.000232"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:38.030656" level="INFO">${karaf_connection_index} = 222</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-10-06T01:24:38.030344" elapsed="0.000368"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:38.031206" 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-10-06T01:24:38.030963" elapsed="0.000276"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:38.065171" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:38.032086" elapsed="0.033259"/>
</kw>
<msg time="2026-10-06T01:24:38.065502" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:38.065543" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.031455" elapsed="0.034122"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:38.143205" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:38.066201" elapsed="0.077180"/>
</kw>
<msg time="2026-10-06T01:24:38.143574" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:38.143616" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.065759" elapsed="0.077890"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.143975" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:38.143746" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.143727" elapsed="0.000344"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:38.144582" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:38.144248" elapsed="0.000414"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.144953" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:38.144742" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.144725" elapsed="0.000323"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:38.145078" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:38.147579" elapsed="0.000514"/>
</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-10-06T01:24:38.149308" elapsed="0.000479"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:38.151166" elapsed="0.000301"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:38.145867" elapsed="0.005666"/>
</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-10-06T01:24:38.145342" elapsed="0.006306"/>
</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="PASS" start="2026-10-06T01:24:38.029528" elapsed="0.122213"/>
</kw>
<msg time="2026-10-06T01:24:38.151823" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:38.151862" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.028663" elapsed="0.123249"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:38.152067" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:38.151982" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.151965" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:24:38.152468" elapsed="0.000024"/>
</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-10-06T01:24:38.152858" elapsed="0.000039"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:38.152941" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:38.027823" elapsed="0.125204"/>
</kw>
<msg time="2026-10-06T01:24:38.153111" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:38.153150" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.025174" elapsed="0.128010"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.153480" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:38.153252" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.153236" elapsed="0.000317"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:38.024980" elapsed="0.128594"/>
</iter>
<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-10-06T01:24:38.156169" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:38.156084" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.156067" elapsed="0.000165"/>
</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-10-06T01:24:38.157364" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:38.157278" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.157260" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:38.157819" level="INFO">${karaf_connection_index} = 224</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-10-06T01:24:38.157570" elapsed="0.000274"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:38.158191" 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-10-06T01:24:38.158019" elapsed="0.000197"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:38.193613" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:38.158797" elapsed="0.035032"/>
</kw>
<msg time="2026-10-06T01:24:38.194001" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:38.194043" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.158369" elapsed="0.035708"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:38.289490" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:38.194656" elapsed="0.095016"/>
</kw>
<msg time="2026-10-06T01:24:38.289853" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:38.289909" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.194241" elapsed="0.095703"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.290220" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:38.290015" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.289997" elapsed="0.000317"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:38.290853" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:38.290500" elapsed="0.000448"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.291205" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:38.291010" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.290994" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:38.291329" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:38.293780" elapsed="0.000486"/>
</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-10-06T01:24:38.295478" elapsed="0.000486"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:38.297308" elapsed="0.000303"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:38.292127" elapsed="0.005564"/>
</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-10-06T01:24:38.291596" elapsed="0.006214"/>
</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="PASS" start="2026-10-06T01:24:38.156984" elapsed="0.140917"/>
</kw>
<msg time="2026-10-06T01:24:38.297985" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:38.298024" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.156379" elapsed="0.141679"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:38.298214" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:38.298130" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.298109" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.298600" elapsed="0.000023"/>
</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-10-06T01:24:38.299044" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:38.299111" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:24:38.155780" elapsed="0.143416"/>
</kw>
<msg time="2026-10-06T01:24:38.299280" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:38.299325" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.153836" elapsed="0.145523"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.299644" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:38.299429" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.299412" elapsed="0.000321"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:38.153698" elapsed="0.146056"/>
</iter>
<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-10-06T01:24:38.302309" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:38.302224" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.302206" elapsed="0.000166"/>
</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-10-06T01:24:38.303470" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:38.303386" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.303369" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:38.303936" level="INFO">${karaf_connection_index} = 226</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-10-06T01:24:38.303673" elapsed="0.000288"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:38.304291" 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-10-06T01:24:38.304120" elapsed="0.000195"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:38.340146" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:38.304911" elapsed="0.035419"/>
</kw>
<msg time="2026-10-06T01:24:38.340486" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:38.340527" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.304468" elapsed="0.036093"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:38.422072" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:38.341184" elapsed="0.081082"/>
</kw>
<msg time="2026-10-06T01:24:38.422425" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:38.422466" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.340745" elapsed="0.081756"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.422818" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:38.422572" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.422554" elapsed="0.000380"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:38.423454" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:38.423116" elapsed="0.000422"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.423814" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:38.423600" elapsed="0.000406"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.423583" elapsed="0.000449"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:38.424064" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:38.426530" elapsed="0.000522"/>
</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-10-06T01:24:38.428305" elapsed="0.000500"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:38.430334" elapsed="0.000315"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:38.424852" elapsed="0.005880"/>
</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-10-06T01:24:38.424328" elapsed="0.006524"/>
</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="PASS" start="2026-10-06T01:24:38.303129" elapsed="0.127820"/>
</kw>
<msg time="2026-10-06T01:24:38.431032" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:38.431071" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.302518" elapsed="0.128589"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:38.431262" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:38.431176" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.431159" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.431660" elapsed="0.000105"/>
</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-10-06T01:24:38.432088" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:38.432154" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:38.301931" elapsed="0.130309"/>
</kw>
<msg time="2026-10-06T01:24:38.432324" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:38.432363" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.300022" elapsed="0.132376"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.432696" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:38.432465" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.432450" elapsed="0.000320"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:38.299863" elapsed="0.132928"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:38.024777" elapsed="0.408041"/>
</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-10-06T01:24:38.021754" elapsed="0.411113"/>
</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-10-06T01:24:38.019020" elapsed="0.413919"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.018442" elapsed="0.414538"/>
</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-10-06T01:24:38.016597" elapsed="0.416431"/>
</kw>
<kw name="Create Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:24:38.437158" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Create bridge br01 in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:24:38.435905" elapsed="0.001289">Variable '${original_owner}' not found.</status>
</kw>
<doc>Create Bridge in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:24:38.015768" elapsed="0.421559">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s2-t8" name="Create Port In Owner and Verify Before Fail" line="51">
<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-10-06T01:24:38.439040" elapsed="0.000200"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:24:38.438720" elapsed="0.000571"/>
</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-10-06T01:24:38.440195" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:38.440110" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.440093" elapsed="0.000202"/>
</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-10-06T01:24:38.442172" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:38.442087" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.442071" elapsed="0.000162"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:38.443154" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:38.442811" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:38.443602" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:38.443328" elapsed="0.000298"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:38.443667" elapsed="0.000043"/>
</return>
<msg time="2026-10-06T01:24:38.443811" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:38.442441" elapsed="0.001393"/>
</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-10-06T01:24:38.446360" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:38.446276" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.446259" elapsed="0.000165"/>
</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-10-06T01:24:38.447529" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:38.447440" elapsed="0.000132"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.447423" elapsed="0.000170"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:38.448093" level="INFO">${karaf_connection_index} = 222</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-10-06T01:24:38.447762" elapsed="0.000357"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:38.448460" 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-10-06T01:24:38.448286" elapsed="0.000199"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:38.485878" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:38.449090" elapsed="0.036979"/>
</kw>
<msg time="2026-10-06T01:24:38.486226" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:38.486267" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.448639" elapsed="0.037664"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:38.562330" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:38.486927" elapsed="0.075583"/>
</kw>
<msg time="2026-10-06T01:24:38.562667" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:38.562732" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.486465" elapsed="0.076304"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.563063" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:38.562839" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.562821" elapsed="0.000338"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:38.563688" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:38.563338" elapsed="0.000440"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.564051" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:38.563839" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.563822" elapsed="0.000352"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:38.564207" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:38.566672" elapsed="0.000511"/>
</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-10-06T01:24:38.568417" elapsed="0.000494"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:38.570283" elapsed="0.000307"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:38.565009" elapsed="0.005647"/>
</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-10-06T01:24:38.564472" elapsed="0.006320"/>
</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="PASS" start="2026-10-06T01:24:38.447183" elapsed="0.123686"/>
</kw>
<msg time="2026-10-06T01:24:38.570969" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:38.571009" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.446571" elapsed="0.124473"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:38.571198" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:38.571113" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.571096" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:24:38.571593" elapsed="0.000024"/>
</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-10-06T01:24:38.571995" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:38.572061" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:38.445985" elapsed="0.126161"/>
</kw>
<msg time="2026-10-06T01:24:38.572229" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:38.572269" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.444184" elapsed="0.128120"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.572587" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:38.572372" elapsed="0.000263"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.572356" elapsed="0.000300"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:38.444045" elapsed="0.128649"/>
</iter>
<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-10-06T01:24:38.575236" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:38.575151" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.575134" elapsed="0.000164"/>
</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-10-06T01:24:38.576395" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:38.576312" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.576296" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:38.576846" level="INFO">${karaf_connection_index} = 224</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-10-06T01:24:38.576598" elapsed="0.000273"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:38.577218" 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-10-06T01:24:38.577043" elapsed="0.000200"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:38.614262" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:38.577826" elapsed="0.036612"/>
</kw>
<msg time="2026-10-06T01:24:38.614594" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:38.614636" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.577394" elapsed="0.037278"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:38.693926" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:38.615338" elapsed="0.078770"/>
</kw>
<msg time="2026-10-06T01:24:38.694265" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:38.694306" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.614912" elapsed="0.079430"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.694614" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:38.694413" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.694395" elapsed="0.000338"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:38.695261" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:38.694924" elapsed="0.000420"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.695606" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:38.695406" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.695389" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:38.695748" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:38.698231" elapsed="0.000497"/>
</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-10-06T01:24:38.699976" elapsed="0.000453"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:38.701626" elapsed="0.000366"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:38.696525" elapsed="0.005532"/>
</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-10-06T01:24:38.696031" elapsed="0.006143"/>
</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="PASS" start="2026-10-06T01:24:38.576057" elapsed="0.126193"/>
</kw>
<msg time="2026-10-06T01:24:38.702329" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:38.702369" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.575445" elapsed="0.126958"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:38.702560" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:38.702474" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.702454" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.703170" elapsed="0.000024"/>
</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-10-06T01:24:38.703463" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:38.703526" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:38.574846" elapsed="0.128765"/>
</kw>
<msg time="2026-10-06T01:24:38.703710" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:38.703751" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.572954" elapsed="0.130832"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.704088" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:38.703853" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.703837" elapsed="0.000322"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:38.572804" elapsed="0.131406"/>
</iter>
<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-10-06T01:24:38.706775" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:38.706688" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.706657" elapsed="0.000181"/>
</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-10-06T01:24:38.707958" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:38.707856" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.707839" elapsed="0.000182"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:38.708384" level="INFO">${karaf_connection_index} = 226</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-10-06T01:24:38.708161" elapsed="0.000248"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:38.708754" 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-10-06T01:24:38.708565" elapsed="0.000214"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:38.744198" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:38.709361" elapsed="0.035014"/>
</kw>
<msg time="2026-10-06T01:24:38.744532" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:38.744573" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.708947" elapsed="0.035661"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:38.820645" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:38.745237" elapsed="0.075625"/>
</kw>
<msg time="2026-10-06T01:24:38.821046" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:38.821089" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.744793" elapsed="0.076332"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.821414" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:38.821199" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.821180" elapsed="0.000328"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:38.822072" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:38.821705" elapsed="0.000452"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.822417" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:38.822220" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.822203" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:38.822542" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:38.825059" elapsed="0.000524"/>
</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-10-06T01:24:38.826847" elapsed="0.000473"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:38.828528" elapsed="0.000566"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:38.823348" elapsed="0.005814"/>
</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-10-06T01:24:38.822831" elapsed="0.006451"/>
</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="PASS" start="2026-10-06T01:24:38.707575" elapsed="0.121784"/>
</kw>
<msg time="2026-10-06T01:24:38.829441" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:38.829481" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.707000" elapsed="0.122546"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:38.829724" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:38.829620" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.829602" elapsed="0.000201"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.830135" elapsed="0.000024"/>
</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-10-06T01:24:38.830442" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:38.830508" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:38.706383" elapsed="0.124212"/>
</kw>
<msg time="2026-10-06T01:24:38.830766" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:38.830810" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.704458" elapsed="0.126388"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.831152" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:38.830935" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.830919" elapsed="0.000304"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:38.704321" elapsed="0.126924"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:38.443900" elapsed="0.387371"/>
</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-10-06T01:24:38.441779" elapsed="0.389543"/>
</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-10-06T01:24:38.439842" elapsed="0.391531"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.439434" elapsed="0.391980"/>
</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-10-06T01:24:38.438342" elapsed="0.393121"/>
</kw>
<kw name="Create Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:24:38.835663" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Add Port vx2 to bridge br01 in controller ${controller_index} and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:24:38.834287" elapsed="0.001426">Variable '${original_owner}' not found.</status>
</kw>
<doc>Create Port in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:24:38.437785" elapsed="0.398050">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s2-t9" name="Modify the destination IP of Port In Owner Before Fail" line="55">
<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-10-06T01:24:38.837163" elapsed="0.000202"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:24:38.836916" elapsed="0.000499"/>
</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-10-06T01:24:38.838329" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:38.838243" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.838225" elapsed="0.000168"/>
</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-10-06T01:24:38.840283" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:38.840200" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.840183" elapsed="0.000163"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:38.841266" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:38.840934" elapsed="0.000358"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:38.841733" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:38.841440" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:38.841799" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:24:38.841940" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:38.840545" elapsed="0.001419"/>
</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-10-06T01:24:38.844522" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:38.844433" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.844416" elapsed="0.000169"/>
</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-10-06T01:24:38.845705" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:38.845598" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.845581" elapsed="0.000189"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:38.846150" level="INFO">${karaf_connection_index} = 222</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-10-06T01:24:38.845927" elapsed="0.000249"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:38.846508" 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-10-06T01:24:38.846336" elapsed="0.000196"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:38.880572" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:38.847173" elapsed="0.033599"/>
</kw>
<msg time="2026-10-06T01:24:38.880956" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:38.880998" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.846703" elapsed="0.034331"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:38.985531" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:38.881618" elapsed="0.104122"/>
</kw>
<msg time="2026-10-06T01:24:38.985913" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:38.985956" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.881197" elapsed="0.104795"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.986263" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:38.986062" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.986044" elapsed="0.000312"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:38.986917" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:38.986535" elapsed="0.000469"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.987260" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:38.987066" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.987049" elapsed="0.000304"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:38.987384" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:38.989866" elapsed="0.000490"/>
</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-10-06T01:24:38.991633" elapsed="0.000497"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:38.993501" elapsed="0.000322"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:38.988173" elapsed="0.005729"/>
</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-10-06T01:24:38.987648" elapsed="0.006372"/>
</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="PASS" start="2026-10-06T01:24:38.845339" elapsed="0.148758"/>
</kw>
<msg time="2026-10-06T01:24:38.994179" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:38.994218" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.844748" elapsed="0.149506"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:38.994449" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:38.994363" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.994345" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:24:38.994937" elapsed="0.000024"/>
</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-10-06T01:24:38.995241" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:38.995306" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:24:38.844142" elapsed="0.151249"/>
</kw>
<msg time="2026-10-06T01:24:38.995475" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:38.995515" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.842291" elapsed="0.153260"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:38.995857" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:38.995619" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.995604" elapsed="0.000342"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:38.842148" elapsed="0.153819"/>
</iter>
<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-10-06T01:24:38.999518" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:38.999387" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:38.999369" elapsed="0.000214"/>
</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-10-06T01:24:39.000721" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:39.000613" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.000596" elapsed="0.000189"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:39.001170" level="INFO">${karaf_connection_index} = 224</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-10-06T01:24:39.000943" elapsed="0.000252"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:39.001526" 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-10-06T01:24:39.001354" elapsed="0.000196"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:39.035944" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:39.002152" elapsed="0.033980"/>
</kw>
<msg time="2026-10-06T01:24:39.036308" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:39.036350" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:39.001721" elapsed="0.034664"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:39.125556" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:39.037005" elapsed="0.088766"/>
</kw>
<msg time="2026-10-06T01:24:39.125951" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:39.125995" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:39.036548" elapsed="0.089483"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:39.126315" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:39.126105" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.126086" elapsed="0.000327"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:39.126974" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:39.126589" elapsed="0.000507"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:39.127359" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:39.127160" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.127143" elapsed="0.000311"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:39.127484" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:39.130007" elapsed="0.000477"/>
</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-10-06T01:24:39.131746" elapsed="0.000473"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:39.133591" elapsed="0.000346"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:39.128289" elapsed="0.005717"/>
</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-10-06T01:24:39.127772" elapsed="0.006353"/>
</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="PASS" start="2026-10-06T01:24:39.000355" elapsed="0.133846"/>
</kw>
<msg time="2026-10-06T01:24:39.134284" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:39.134325" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.999747" elapsed="0.134614"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:39.134516" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:39.134430" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.134413" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:39.134963" elapsed="0.000025"/>
</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-10-06T01:24:39.135259" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:39.135324" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:24:38.999092" elapsed="0.136317"/>
</kw>
<msg time="2026-10-06T01:24:39.135498" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:39.135538" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.996209" elapsed="0.139365"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:39.135913" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:39.135641" elapsed="0.000323"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.135625" elapsed="0.000362"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:38.996074" elapsed="0.139934"/>
</iter>
<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-10-06T01:24:39.138579" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:39.138494" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.138477" elapsed="0.000166"/>
</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-10-06T01:24:39.139774" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:39.139665" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.139648" elapsed="0.000189"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:39.140221" level="INFO">${karaf_connection_index} = 226</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-10-06T01:24:39.139994" elapsed="0.000252"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:39.140580" 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-10-06T01:24:39.140406" elapsed="0.000199"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:39.175633" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:39.141342" elapsed="0.034489"/>
</kw>
<msg time="2026-10-06T01:24:39.176084" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:39.176127" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:39.140777" elapsed="0.035386"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:39.277988" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:39.176775" elapsed="0.101403"/>
</kw>
<msg time="2026-10-06T01:24:39.278340" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:39.278381" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:39.176329" elapsed="0.102087"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:39.278722" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:39.278487" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.278469" elapsed="0.000350"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:39.279357" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:39.279015" elapsed="0.000431"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:39.279729" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:39.279508" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.279491" elapsed="0.000333"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:39.279854" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:39.282326" elapsed="0.000498"/>
</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-10-06T01:24:39.284083" elapsed="0.000454"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:39.285761" elapsed="0.000327"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:39.280628" elapsed="0.005527"/>
</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-10-06T01:24:39.280136" elapsed="0.006137"/>
</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="PASS" start="2026-10-06T01:24:39.139406" elapsed="0.146945"/>
</kw>
<msg time="2026-10-06T01:24:39.286433" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:39.286474" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:39.138811" elapsed="0.147699"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:39.286663" elapsed="0.000052"/>
</return>
<status status="PASS" start="2026-10-06T01:24:39.286579" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.286562" elapsed="0.000207"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:39.287095" elapsed="0.000023"/>
</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-10-06T01:24:39.287392" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:39.287457" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:24:39.138202" elapsed="0.149339"/>
</kw>
<msg time="2026-10-06T01:24:39.287625" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:39.287666" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:39.136255" elapsed="0.151470"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:39.288066" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:39.287832" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.287815" elapsed="0.000323"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:39.136118" elapsed="0.152041"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:38.842010" elapsed="0.446175"/>
</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-10-06T01:24:38.839905" elapsed="0.448330"/>
</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-10-06T01:24:38.837988" elapsed="0.450299"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:38.837569" elapsed="0.450758"/>
</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-10-06T01:24:38.836543" elapsed="0.451832"/>
</kw>
<kw name="Modify the destination IP of Sample Port" owner="ClusterOvsdb">
<msg time="2026-10-06T01:24:39.291543" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Modify the dst ip of port vx2 in bridge br01 in controller ${controller_index}.</doc>
<status status="FAIL" start="2026-10-06T01:24:39.290018" elapsed="0.001560">Variable '${original_owner}' not found.</status>
</kw>
<doc>Modify the dst ip of existing port in Owner.</doc>
<status status="FAIL" start="2026-10-06T01:24:38.836093" elapsed="0.455622">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s2-t10" name="Verify Port Is Modified Before Fail" line="59">
<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-10-06T01:24:39.293035" elapsed="0.000202"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:24:39.292761" elapsed="0.000527"/>
</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-10-06T01:24:39.294196" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:39.294110" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.294093" elapsed="0.000166"/>
</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-10-06T01:24:39.296136" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:39.296053" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.296037" elapsed="0.000162"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:39.297143" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:39.296797" elapsed="0.000371"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:39.297716" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:39.297422" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:39.297783" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:24:39.297928" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:39.296399" elapsed="0.001552"/>
</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-10-06T01:24:39.300459" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:39.300374" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.300356" elapsed="0.000168"/>
</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-10-06T01:24:39.301627" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:39.301542" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.301525" elapsed="0.000189"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:39.302103" level="INFO">${karaf_connection_index} = 222</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-10-06T01:24:39.301858" elapsed="0.000270"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:39.302463" 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-10-06T01:24:39.302289" elapsed="0.000198"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:39.338211" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:39.303092" elapsed="0.035307"/>
</kw>
<msg time="2026-10-06T01:24:39.338559" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:39.338600" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:39.302642" elapsed="0.036051"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:39.409583" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:39.339310" elapsed="0.070465"/>
</kw>
<msg time="2026-10-06T01:24:39.409950" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:39.409993" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:39.338864" elapsed="0.071165"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:39.410306" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:39.410100" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.410083" elapsed="0.000318"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:39.410973" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:39.410586" elapsed="0.000468"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:39.411316" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:39.411117" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.411100" elapsed="0.000310"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:39.411441" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:39.413919" elapsed="0.000475"/>
</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-10-06T01:24:39.415618" elapsed="0.000494"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:39.417283" elapsed="0.000308"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:39.412237" elapsed="0.005421"/>
</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-10-06T01:24:39.411726" elapsed="0.006066"/>
</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="PASS" start="2026-10-06T01:24:39.301282" elapsed="0.116589"/>
</kw>
<msg time="2026-10-06T01:24:39.417971" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:39.418012" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:39.300689" elapsed="0.117359"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:39.418203" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:39.418118" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.418101" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:24:39.418594" elapsed="0.000024"/>
</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-10-06T01:24:39.418937" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:39.419004" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:39.300081" elapsed="0.119009"/>
</kw>
<msg time="2026-10-06T01:24:39.419174" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:39.419214" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:39.298275" elapsed="0.120975"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:39.419570" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:39.419319" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.419303" elapsed="0.000341"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:39.298136" elapsed="0.121529"/>
</iter>
<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-10-06T01:24:39.422319" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:39.422233" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.422216" elapsed="0.000167"/>
</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-10-06T01:24:39.423500" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:39.423414" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.423397" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:39.424139" level="INFO">${karaf_connection_index} = 224</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-10-06T01:24:39.423912" elapsed="0.000252"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:39.424497" 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-10-06T01:24:39.424326" elapsed="0.000195"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:39.457773" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:39.425125" elapsed="0.032844"/>
</kw>
<msg time="2026-10-06T01:24:39.458127" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:39.458169" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:39.424690" elapsed="0.033514"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:39.507410" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:39.458808" elapsed="0.048779"/>
</kw>
<msg time="2026-10-06T01:24:39.507773" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:39.507815" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:39.458369" elapsed="0.049482"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:39.508142" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:39.507940" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.507922" elapsed="0.000314"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:39.508793" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:39.508414" elapsed="0.000460"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:39.509147" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:39.508951" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.508934" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:39.509271" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:39.511753" elapsed="0.000498"/>
</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-10-06T01:24:39.513486" elapsed="0.000494"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:39.515225" elapsed="0.000314"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:39.510066" elapsed="0.005540"/>
</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-10-06T01:24:39.509537" elapsed="0.006208"/>
</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="PASS" start="2026-10-06T01:24:39.423155" elapsed="0.092666"/>
</kw>
<msg time="2026-10-06T01:24:39.515955" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:39.515997" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:39.422530" elapsed="0.093504"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:39.516190" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:39.516104" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.516087" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:39.516581" elapsed="0.000024"/>
</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-10-06T01:24:39.516912" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:39.516979" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:24:39.421940" elapsed="0.095125"/>
</kw>
<msg time="2026-10-06T01:24:39.517150" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:39.517191" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:39.420078" elapsed="0.097149"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:39.517513" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:39.517296" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.517280" elapsed="0.000310"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:39.419938" elapsed="0.097673"/>
</iter>
<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-10-06T01:24:39.520152" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:39.520067" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.520049" elapsed="0.000166"/>
</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-10-06T01:24:39.521329" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:39.521244" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.521227" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:39.522088" level="INFO">${karaf_connection_index} = 226</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-10-06T01:24:39.521537" elapsed="0.000576"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:39.522448" 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-10-06T01:24:39.522274" elapsed="0.000198"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:39.554991" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:39.523079" elapsed="0.032082"/>
</kw>
<msg time="2026-10-06T01:24:39.555335" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:39.555378" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:39.522627" elapsed="0.032788"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:39.619816" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:39.556042" elapsed="0.063965"/>
</kw>
<msg time="2026-10-06T01:24:39.620163" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:39.620204" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:39.555580" elapsed="0.064660"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:39.620510" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:39.620309" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.620292" elapsed="0.000341"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:39.621197" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:39.620837" elapsed="0.000442"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:39.621539" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:39.621341" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.621324" elapsed="0.000309"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:39.621663" elapsed="0.000044"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:39.624176" elapsed="0.000476"/>
</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-10-06T01:24:39.625931" elapsed="0.000459"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:39.627596" elapsed="0.000558"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:39.622451" elapsed="0.005771"/>
</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-10-06T01:24:39.621960" elapsed="0.006380"/>
</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="PASS" start="2026-10-06T01:24:39.520986" elapsed="0.107431"/>
</kw>
<msg time="2026-10-06T01:24:39.628500" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:39.628540" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:39.520363" elapsed="0.108213"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:39.628749" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:39.628646" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.628629" elapsed="0.000199"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:39.629158" elapsed="0.000023"/>
</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-10-06T01:24:39.629459" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:39.629524" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:39.519757" elapsed="0.109853"/>
</kw>
<msg time="2026-10-06T01:24:39.629780" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:39.629823" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:39.517900" elapsed="0.111959"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:39.630198" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:39.629980" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:39.629963" elapsed="0.000309"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:39.517749" elapsed="0.112544"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:39.297998" elapsed="0.332322"/>
</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-10-06T01:24:39.295744" elapsed="0.334626"/>
</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-10-06T01:24:39.293839" elapsed="0.336582"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:39.293433" elapsed="0.337030"/>
</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-10-06T01:24:39.292353" elapsed="0.338158"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:24:39.632823" level="INFO">${port_dictionary} = {'br01': '6', 'vx2': '3', '10.0.0.19': '1'}</msg>
<var>${port_dictionary}</var>
<arg>br01=6</arg>
<arg>vx2=3</arg>
<arg>10.0.0.19=1</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:24:39.632452" elapsed="0.000398"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:24:39.637384" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:24:39.636089" elapsed="0.001329">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:24:40.646728" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:24:40.643786" elapsed="0.003023">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:24:41.656245" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:24:41.653130" elapsed="0.003200">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:24:42.665653" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:24:42.662720" elapsed="0.003042">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:24:43.675121" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:24:43.672196" elapsed="0.003006">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:24:44.684853" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:24:44.681930" elapsed="0.003022">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<msg time="2026-10-06T01:24:44.685152" level="FAIL">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</msg>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-10-06T01:24:39.633097" elapsed="5.052326">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:24:39.632091" elapsed="5.053581">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify port is modified in all instances.</doc>
<status status="FAIL" start="2026-10-06T01:24:39.291930" elapsed="5.394076">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s1-s2-t11" name="Delete Port In Owner Before Fail" line="63">
<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-10-06T01:24:44.689286" elapsed="0.000556"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:24:44.688670" elapsed="0.001307"/>
</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-10-06T01:24:44.692151" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:44.691899" elapsed="0.000355"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:44.691853" elapsed="0.000452"/>
</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-10-06T01:24:44.696561" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:44.696374" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:44.696336" elapsed="0.000396"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:44.698842" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:44.698063" elapsed="0.000837"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:44.699924" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:44.699266" elapsed="0.000715"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:44.700073" elapsed="0.000062"/>
</return>
<msg time="2026-10-06T01:24:44.700447" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:44.697214" elapsed="0.003285"/>
</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-10-06T01:24:44.706313" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:44.706122" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:44.706082" elapsed="0.000373"/>
</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-10-06T01:24:44.709054" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:44.708839" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:44.708801" elapsed="0.000395"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:44.710088" level="INFO">${karaf_connection_index} = 222</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-10-06T01:24:44.709518" elapsed="0.000626"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:44.710972" 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-10-06T01:24:44.710507" elapsed="0.000521"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:44.747325" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:44.712376" elapsed="0.035220"/>
</kw>
<msg time="2026-10-06T01:24:44.747852" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:44.747925" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:44.711377" elapsed="0.036600"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:44.816551" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:44.748841" elapsed="0.068160"/>
</kw>
<msg time="2026-10-06T01:24:44.817333" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:44.817395" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:44.748207" elapsed="0.069238"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:44.818100" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:44.817618" elapsed="0.000595"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:44.817559" elapsed="0.000694"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:44.819176" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:44.818513" elapsed="0.000781"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:44.819664" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:44.819382" elapsed="0.000409"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:44.819358" elapsed="0.000465"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:44.819872" elapsed="0.000068"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:44.823649" elapsed="0.000793"/>
</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-10-06T01:24:44.826243" elapsed="0.000937"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:44.828992" elapsed="0.000374"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:44.821169" elapsed="0.008266"/>
</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-10-06T01:24:44.820356" elapsed="0.009199"/>
</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="PASS" start="2026-10-06T01:24:44.708216" elapsed="0.121420"/>
</kw>
<msg time="2026-10-06T01:24:44.829855" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:44.829898" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:44.706819" elapsed="0.123129"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:44.830114" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:24:44.830024" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:44.830006" elapsed="0.000190"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:24:44.830549" elapsed="0.000024"/>
</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-10-06T01:24:44.830996" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:44.831063" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:44.705408" elapsed="0.125747"/>
</kw>
<msg time="2026-10-06T01:24:44.831250" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:44.831292" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:44.701308" elapsed="0.130020"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:44.831628" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:44.831403" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:44.831386" elapsed="0.000335"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:44.700990" elapsed="0.130753"/>
</iter>
<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-10-06T01:24:44.834498" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:44.834411" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:44.834393" elapsed="0.000168"/>
</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-10-06T01:24:44.835697" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:44.835591" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:44.835574" elapsed="0.000189"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:44.836162" level="INFO">${karaf_connection_index} = 224</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-10-06T01:24:44.835921" elapsed="0.000265"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:44.836537" 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-10-06T01:24:44.836357" elapsed="0.000205"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:44.869439" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:44.837171" elapsed="0.032460"/>
</kw>
<msg time="2026-10-06T01:24:44.869809" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:44.869851" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:44.836734" elapsed="0.033152"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:44.933084" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:44.870497" elapsed="0.062803"/>
</kw>
<msg time="2026-10-06T01:24:44.933482" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:44.933523" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:44.870078" elapsed="0.063481"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:44.933934" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:44.933645" elapsed="0.000415"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:44.933620" elapsed="0.000467"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:44.934659" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:44.934270" elapsed="0.000487"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:44.935034" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:44.934820" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:44.934803" elapsed="0.000327"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:44.935164" elapsed="0.000030"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:44.937748" elapsed="0.000506"/>
</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-10-06T01:24:44.939480" elapsed="0.000499"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:44.941151" elapsed="0.000316"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:44.936024" elapsed="0.005511"/>
</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-10-06T01:24:44.935470" elapsed="0.006182"/>
</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="PASS" start="2026-10-06T01:24:44.835332" elapsed="0.106422"/>
</kw>
<msg time="2026-10-06T01:24:44.941838" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:44.941878" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:44.834727" elapsed="0.107200"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:44.942085" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:44.942000" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:44.941982" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:44.942495" elapsed="0.000024"/>
</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-10-06T01:24:44.943123" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:44.943190" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:24:44.834104" elapsed="0.109172"/>
</kw>
<msg time="2026-10-06T01:24:44.943365" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:44.943406" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:44.832037" elapsed="0.111405"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:44.943760" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:44.943513" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:44.943497" elapsed="0.000336"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:44.831878" elapsed="0.111977"/>
</iter>
<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-10-06T01:24:44.946488" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:44.946402" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:44.946385" elapsed="0.000167"/>
</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-10-06T01:24:44.947649" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:44.947565" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:44.947549" elapsed="0.000187"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:44.948124" level="INFO">${karaf_connection_index} = 226</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-10-06T01:24:44.947879" elapsed="0.000270"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:44.948491" 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-10-06T01:24:44.948309" elapsed="0.000237"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:44.982198" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:44.949155" elapsed="0.033219"/>
</kw>
<msg time="2026-10-06T01:24:44.982551" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:44.982592" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:44.948724" elapsed="0.033903"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:45.043759" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:44.983263" elapsed="0.060685"/>
</kw>
<msg time="2026-10-06T01:24:45.044106" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:45.044147" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:44.982823" elapsed="0.061359"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.044454" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:45.044252" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.044234" elapsed="0.000313"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:45.045093" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:45.044740" elapsed="0.000431"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.045428" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:45.045232" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.045216" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:45.045552" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:45.048025" elapsed="0.000473"/>
</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-10-06T01:24:45.049752" elapsed="0.000469"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:45.051412" elapsed="0.000568"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:45.046351" elapsed="0.005698"/>
</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-10-06T01:24:45.045842" elapsed="0.006323"/>
</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="PASS" start="2026-10-06T01:24:44.947307" elapsed="0.104935"/>
</kw>
<msg time="2026-10-06T01:24:45.052324" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:45.052363" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:44.946716" elapsed="0.105683"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:45.052553" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:45.052468" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.052451" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.052981" elapsed="0.000024"/>
</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-10-06T01:24:45.053283" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:45.053347" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:44.946105" elapsed="0.107328"/>
</kw>
<msg time="2026-10-06T01:24:45.053551" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:45.053590" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:44.944133" elapsed="0.109493"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.054015" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:45.053784" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.053766" elapsed="0.000322"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:44.943994" elapsed="0.110115"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:44.700610" elapsed="0.353526"/>
</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-10-06T01:24:44.695696" elapsed="0.358501"/>
</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-10-06T01:24:44.691274" elapsed="0.362982"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:44.690312" elapsed="0.363991"/>
</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-10-06T01:24:44.687869" elapsed="0.366492"/>
</kw>
<kw name="Delete Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:24:45.058461" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Delete port vx2 from bridge br01 in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:24:45.057196" elapsed="0.001301">Variable '${original_owner}' not found.</status>
</kw>
<doc>Delete port in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:24:44.686661" elapsed="0.371991">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s2-t12" name="Delete Bridge In Owner And Verify Before Fail" line="67">
<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-10-06T01:24:45.060790" elapsed="0.000328"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:24:45.060521" elapsed="0.000649"/>
</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-10-06T01:24:45.062101" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:45.062015" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.061997" elapsed="0.000167"/>
</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-10-06T01:24:45.064046" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:45.063962" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.063945" elapsed="0.000164"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:45.065034" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:45.064670" elapsed="0.000390"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:45.065482" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:45.065213" elapsed="0.000293"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:45.065546" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:24:45.065692" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:45.064313" elapsed="0.001404"/>
</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-10-06T01:24:45.069555" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:45.069469" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.069451" elapsed="0.000168"/>
</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-10-06T01:24:45.070732" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:45.070625" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.070608" elapsed="0.000187"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:45.071178" level="INFO">${karaf_connection_index} = 222</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-10-06T01:24:45.070953" elapsed="0.000250"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:45.071537" 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-10-06T01:24:45.071361" elapsed="0.000200"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:45.107258" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:45.072300" elapsed="0.035158"/>
</kw>
<msg time="2026-10-06T01:24:45.107640" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:45.107703" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.071836" elapsed="0.035905"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:45.198888" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:45.108404" elapsed="0.090685"/>
</kw>
<msg time="2026-10-06T01:24:45.199249" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:45.199290" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.107943" elapsed="0.091385"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.199625" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:45.199407" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.199384" elapsed="0.000364"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:45.200289" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:45.199942" elapsed="0.000432"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.200631" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:45.200436" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.200419" elapsed="0.000327"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:45.200784" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:45.203367" elapsed="0.000511"/>
</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-10-06T01:24:45.205147" elapsed="0.000482"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:45.206837" elapsed="0.000337"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:45.201614" elapsed="0.005627"/>
</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-10-06T01:24:45.201106" elapsed="0.006256"/>
</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="PASS" start="2026-10-06T01:24:45.070367" elapsed="0.137072"/>
</kw>
<msg time="2026-10-06T01:24:45.207522" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:45.207561" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.069782" elapsed="0.137815"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:45.207774" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:45.207666" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.207649" elapsed="0.000202"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:24:45.208192" elapsed="0.000024"/>
</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-10-06T01:24:45.208499" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:45.208564" 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="PASS" start="2026-10-06T01:24:45.069178" elapsed="0.139472"/>
</kw>
<msg time="2026-10-06T01:24:45.208779" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:45.208862" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.066081" elapsed="0.142818"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.209208" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:45.208987" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.208971" elapsed="0.000308"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:45.065937" elapsed="0.143364"/>
</iter>
<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-10-06T01:24:45.212168" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:45.212083" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.212065" elapsed="0.000166"/>
</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-10-06T01:24:45.213324" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:45.213241" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.213224" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:45.213783" level="INFO">${karaf_connection_index} = 224</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-10-06T01:24:45.213530" elapsed="0.000278"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:45.214159" 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-10-06T01:24:45.213982" elapsed="0.000201"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:45.246334" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:45.214776" elapsed="0.031752"/>
</kw>
<msg time="2026-10-06T01:24:45.246708" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:45.246752" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.214337" elapsed="0.032451"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:45.324379" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:45.247381" elapsed="0.077204"/>
</kw>
<msg time="2026-10-06T01:24:45.324802" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:45.324846" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.246964" elapsed="0.077919"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.325232" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:45.324980" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.324956" elapsed="0.000379"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:45.325931" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:45.325523" elapsed="0.000495"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.326310" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:45.326099" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.326077" elapsed="0.000330"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:45.326439" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:45.329060" elapsed="0.000484"/>
</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-10-06T01:24:45.330833" elapsed="0.000492"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:45.332709" elapsed="0.000334"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:45.327307" elapsed="0.005855"/>
</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-10-06T01:24:45.326773" elapsed="0.006507"/>
</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="PASS" start="2026-10-06T01:24:45.212983" elapsed="0.120376"/>
</kw>
<msg time="2026-10-06T01:24:45.333445" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:45.333485" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.212377" elapsed="0.121145"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:45.333753" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-10-06T01:24:45.333592" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.333574" elapsed="0.000259"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.334176" elapsed="0.000024"/>
</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-10-06T01:24:45.334481" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:45.334545" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:45.211769" elapsed="0.122862"/>
</kw>
<msg time="2026-10-06T01:24:45.334734" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:45.334776" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.209554" elapsed="0.125258"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.335119" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:45.334881" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.334865" elapsed="0.000324"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:45.209417" elapsed="0.125794"/>
</iter>
<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-10-06T01:24:45.337904" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:45.337819" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.337802" elapsed="0.000184"/>
</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-10-06T01:24:45.339102" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:45.339018" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.339000" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:45.339541" level="INFO">${karaf_connection_index} = 226</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-10-06T01:24:45.339308" elapsed="0.000257"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:45.339937" 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-10-06T01:24:45.339744" elapsed="0.000218"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:45.372429" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:45.340529" elapsed="0.032074"/>
</kw>
<msg time="2026-10-06T01:24:45.372787" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:45.372830" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.340116" elapsed="0.032750"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:45.462609" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:45.373477" elapsed="0.089335"/>
</kw>
<msg time="2026-10-06T01:24:45.462985" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:45.463027" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.373048" elapsed="0.090048"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.463371" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:45.463169" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.463151" elapsed="0.000315"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:45.464017" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:45.463642" elapsed="0.000458"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.464357" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:45.464161" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.464144" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:45.464480" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:45.466986" elapsed="0.000491"/>
</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-10-06T01:24:45.468748" elapsed="0.000469"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:45.470576" elapsed="0.000326"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:45.465277" elapsed="0.005707"/>
</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-10-06T01:24:45.464768" elapsed="0.006341"/>
</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="PASS" start="2026-10-06T01:24:45.338728" elapsed="0.132466"/>
</kw>
<msg time="2026-10-06T01:24:45.471277" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:45.471317" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.338133" elapsed="0.133220"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:45.471509" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:45.471423" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.471406" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.471996" elapsed="0.000024"/>
</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-10-06T01:24:45.472296" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:45.472360" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:45.337508" elapsed="0.134938"/>
</kw>
<msg time="2026-10-06T01:24:45.472530" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:45.472570" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.335471" elapsed="0.137134"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.472923" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:45.472688" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.472657" elapsed="0.000338"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:45.335331" elapsed="0.137684"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:45.065769" elapsed="0.407272"/>
</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-10-06T01:24:45.063647" elapsed="0.409449"/>
</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-10-06T01:24:45.061718" elapsed="0.411431"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.061315" elapsed="0.411876"/>
</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-10-06T01:24:45.059868" elapsed="0.413442"/>
</kw>
<kw name="Delete Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:24:45.477532" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Delete bridge br01 in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:24:45.476272" elapsed="0.001297">Variable '${original_owner}' not found.</status>
</kw>
<doc>Delete bridge in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:24:45.059201" elapsed="0.418531">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s2-t13" name="Kill Candidate Instance" line="71">
<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-10-06T01:24:45.479380" elapsed="0.000216"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:24:45.479133" elapsed="0.000513"/>
</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-10-06T01:24:45.480563" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:45.480476" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.480459" elapsed="0.000167"/>
</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-10-06T01:24:45.482525" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:45.482439" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.482420" elapsed="0.000167"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:45.483513" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:45.483187" elapsed="0.000352"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:45.483992" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:45.483705" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:45.484057" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:24:45.484182" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:45.482814" elapsed="0.001390"/>
</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-10-06T01:24:45.486760" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:45.486659" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.486642" elapsed="0.000181"/>
</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-10-06T01:24:45.487947" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:45.487848" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.487832" elapsed="0.000178"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:45.488375" level="INFO">${karaf_connection_index} = 222</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-10-06T01:24:45.488151" elapsed="0.000248"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:45.488747" 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-10-06T01:24:45.488559" elapsed="0.000212"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:45.526526" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:45.489357" elapsed="0.037382"/>
</kw>
<msg time="2026-10-06T01:24:45.526935" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:45.526978" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.488941" elapsed="0.038072"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:45.581791" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "K "i "l "l "[C "C "a "n "d "i "d "a "t "e "[C "I "n "s "t "[78Ca "[A[78Cn
 "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:45.527649" elapsed="0.054328"/>
</kw>
<msg time="2026-10-06T01:24:45.582137" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:45.582177" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.527201" elapsed="0.055011"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.582547" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:45.582335" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.582313" elapsed="0.000332"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:45.583213" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "K "i "l "l "[C "C "a "n "d "i "d "a "t "e "[C "I "n "s "t "[78Ca "[A[78Cn
 "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:45.582847" elapsed="0.000444"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.583549" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:45.583353" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.583336" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:45.583690" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:45.586237" elapsed="0.000499"/>
</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-10-06T01:24:45.587987" elapsed="0.000464"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:45.589730" elapsed="0.000333"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:45.584495" elapsed="0.005636"/>
</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-10-06T01:24:45.583997" elapsed="0.006252"/>
</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="PASS" start="2026-10-06T01:24:45.487564" elapsed="0.102763"/>
</kw>
<msg time="2026-10-06T01:24:45.590411" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:45.590451" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.486986" elapsed="0.103501"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:45.590642" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:45.590557" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.590540" elapsed="0.000400"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:24:45.591269" elapsed="0.000024"/>
</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-10-06T01:24:45.591570" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:45.591635" 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="PASS" start="2026-10-06T01:24:45.486368" elapsed="0.105372"/>
</kw>
<msg time="2026-10-06T01:24:45.591826" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:45.591866" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.484538" elapsed="0.107365"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.592213" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:45.591994" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.591978" elapsed="0.000306"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:45.484401" elapsed="0.107904"/>
</iter>
<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-10-06T01:24:45.594993" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:45.594890" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.594872" elapsed="0.000184"/>
</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-10-06T01:24:45.596160" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:45.596076" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.596059" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:45.596589" level="INFO">${karaf_connection_index} = 224</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-10-06T01:24:45.596362" elapsed="0.000251"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:45.597022" 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-10-06T01:24:45.596825" elapsed="0.000222"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:45.629256" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:45.597612" elapsed="0.031819"/>
</kw>
<msg time="2026-10-06T01:24:45.629607" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:45.629648" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.597200" elapsed="0.032503"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:45.682794" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "K "i "l "l "[C "C "a "n "d "i "d "a "t "e "[C "I "n "s "t "[78Ca "[A[78Cn
 "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:45.630301" elapsed="0.052681"/>
</kw>
<msg time="2026-10-06T01:24:45.683141" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:45.683181" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.629868" elapsed="0.053348"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.683488" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:45.683287" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.683269" elapsed="0.000312"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:45.684144" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "K "i "l "l "[C "C "a "n "d "i "d "a "t "e "[C "I "n "s "t "[78Ca "[A[78Cn
 "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:45.683787" elapsed="0.000430"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.684475" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:45.684280" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.684264" elapsed="0.000303"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:45.684596" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:45.687071" elapsed="0.000473"/>
</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-10-06T01:24:45.688793" elapsed="0.000470"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:45.690447" elapsed="0.000340"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:45.685381" elapsed="0.005473"/>
</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-10-06T01:24:45.684877" elapsed="0.006114"/>
</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="PASS" start="2026-10-06T01:24:45.595803" elapsed="0.095266"/>
</kw>
<msg time="2026-10-06T01:24:45.691151" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:45.691190" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.595202" elapsed="0.096024"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:45.691380" elapsed="0.000023"/>
</return>
<status status="PASS" start="2026-10-06T01:24:45.691295" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.691278" elapsed="0.000177"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.691797" elapsed="0.000024"/>
</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-10-06T01:24:45.692118" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:45.692217" 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="PASS" start="2026-10-06T01:24:45.594570" elapsed="0.097736"/>
</kw>
<msg time="2026-10-06T01:24:45.692390" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:45.692429" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.592556" elapsed="0.099908"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.692779" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:45.692532" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.692516" elapsed="0.000336"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:45.592419" elapsed="0.100453"/>
</iter>
<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-10-06T01:24:45.695716" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:45.695614" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.695597" elapsed="0.000183"/>
</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-10-06T01:24:45.696879" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:45.696796" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.696779" elapsed="0.000180"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:45.697325" level="INFO">${karaf_connection_index} = 226</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-10-06T01:24:45.697101" elapsed="0.000249"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:45.697697" 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-10-06T01:24:45.697509" elapsed="0.000214"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:45.735562" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:45.698303" elapsed="0.037484"/>
</kw>
<msg time="2026-10-06T01:24:45.735979" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:45.736022" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.697876" elapsed="0.038181"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:45.801633" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "K "i "l "l "[C "C "a "n "d "i "d "a "t "e "[C "I "n "s "t "[78Ca "[A[78Cn
 "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:45.736704" elapsed="0.065124"/>
</kw>
<msg time="2026-10-06T01:24:45.802000" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:45.802041" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.736237" elapsed="0.065839"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.802364" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:45.802152" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.802131" elapsed="0.000328"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:45.803014" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "K "i "l "l "[C "C "a "n "d "i "d "a "t "e "[C "I "n "s "t "[78Ca "[A[78Cn
 "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:45.802642" elapsed="0.000453"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.803360" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:45.803156" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.803139" elapsed="0.000313"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:45.803484" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:45.806047" elapsed="0.000475"/>
</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-10-06T01:24:45.807830" elapsed="0.000479"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:45.809670" elapsed="0.000339"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:45.804326" elapsed="0.005750"/>
</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-10-06T01:24:45.803797" elapsed="0.006395"/>
</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="PASS" start="2026-10-06T01:24:45.696516" elapsed="0.113753"/>
</kw>
<msg time="2026-10-06T01:24:45.810351" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:45.810391" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.695939" elapsed="0.114487"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:45.810580" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:45.810496" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.810479" elapsed="0.000177"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.811072" elapsed="0.000024"/>
</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-10-06T01:24:45.811378" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:45.811444" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:45.695321" elapsed="0.116209"/>
</kw>
<msg time="2026-10-06T01:24:45.811615" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:45.811656" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.693181" elapsed="0.118526"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.812024" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:45.811779" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.811763" elapsed="0.000333"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:45.693043" elapsed="0.119075"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:45.484255" elapsed="0.327893"/>
</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-10-06T01:24:45.482144" elapsed="0.330059"/>
</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-10-06T01:24:45.480222" elapsed="0.332035"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.479813" elapsed="0.332488"/>
</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-10-06T01:24:45.478762" elapsed="0.333591"/>
</kw>
<kw name="Kill_Single_Member" owner="ClusterManagement">
<msg time="2026-10-06T01:24:45.814229" level="FAIL">Variable '${original_candidate}' not found.</msg>
<var>${new_cluster_list}</var>
<arg>${original_candidate}</arg>
<doc>Convenience keyword that kills the specified member of the cluster.
The KW will return a list of available members: ${updated index_list}=${original_index_list}-${member}</doc>
<status status="FAIL" start="2026-10-06T01:24:45.812590" elapsed="0.001676">Variable '${original_candidate}' not found.</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_cluster_list}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.814462" elapsed="0.000021"/>
</kw>
<doc>Kill Owner Instance and verify it is dead</doc>
<status status="FAIL" start="2026-10-06T01:24:45.478307" elapsed="0.336309">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s1-s2-t14" name="Check Shards Status After Fail" line="76">
<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-10-06T01:24:45.816061" elapsed="0.000201"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:24:45.815798" elapsed="0.000514"/>
</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-10-06T01:24:45.817271" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:45.817184" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.817167" elapsed="0.000166"/>
</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-10-06T01:24:45.819217" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:45.819133" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.819116" elapsed="0.000196"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:45.820247" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:45.819900" elapsed="0.000373"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:45.820713" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:45.820425" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:45.820778" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:24:45.820921" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:45.819522" elapsed="0.001423"/>
</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-10-06T01:24:45.823473" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:45.823388" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.823370" elapsed="0.000166"/>
</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-10-06T01:24:45.824638" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:45.824553" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.824536" elapsed="0.000189"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:45.825117" level="INFO">${karaf_connection_index} = 222</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-10-06T01:24:45.824871" elapsed="0.000271"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:45.825480" 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-10-06T01:24:45.825306" elapsed="0.000198"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:45.859442" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:45.826099" elapsed="0.033516"/>
</kw>
<msg time="2026-10-06T01:24:45.859813" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:45.859855" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.825656" elapsed="0.034235"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:45.922418" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CA
 "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:45.860497" elapsed="0.062116"/>
</kw>
<msg time="2026-10-06T01:24:45.922826" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:45.922867" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.860073" elapsed="0.062830"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.923233" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:45.923002" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.922978" elapsed="0.000361"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:45.923947" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CA
 "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:45.923523" elapsed="0.000508"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.924293" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:45.924093" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.924076" elapsed="0.000311"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:45.924418" elapsed="0.000031"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:45.927137" elapsed="0.000578"/>
</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-10-06T01:24:45.929038" elapsed="0.000475"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:45.930923" elapsed="0.000340"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:45.925305" elapsed="0.006028"/>
</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-10-06T01:24:45.924743" elapsed="0.006710"/>
</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="PASS" start="2026-10-06T01:24:45.824296" elapsed="0.107236"/>
</kw>
<msg time="2026-10-06T01:24:45.931617" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:45.931658" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.823698" elapsed="0.108013"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:45.931880" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:45.931792" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.931773" elapsed="0.000207"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:24:45.932338" elapsed="0.000025"/>
</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-10-06T01:24:45.932661" elapsed="0.000175"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:45.932885" 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="PASS" start="2026-10-06T01:24:45.823096" elapsed="0.109905"/>
</kw>
<msg time="2026-10-06T01:24:45.933089" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:45.933136" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.821285" elapsed="0.111888"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:45.933467" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:45.933244" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.933227" elapsed="0.000311"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:45.821145" elapsed="0.112414"/>
</iter>
<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-10-06T01:24:45.936273" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:45.936186" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.936168" elapsed="0.000168"/>
</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-10-06T01:24:45.937455" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:45.937370" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:45.937354" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:45.937959" level="INFO">${karaf_connection_index} = 224</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-10-06T01:24:45.937700" elapsed="0.000290"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:45.938343" 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-10-06T01:24:45.938160" elapsed="0.000208"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:45.970386" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:45.939009" elapsed="0.031569"/>
</kw>
<msg time="2026-10-06T01:24:45.970754" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:45.970796" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.938522" elapsed="0.032309"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:46.046353" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CA
 "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:45.971450" elapsed="0.075089"/>
</kw>
<msg time="2026-10-06T01:24:46.046767" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:46.046814" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.971009" elapsed="0.075842"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.047149" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:46.046944" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.046925" elapsed="0.000320"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:46.047807" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CA
 "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:46.047422" elapsed="0.000465"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.048177" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:46.047976" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.047958" elapsed="0.000313"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:46.048301" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:46.050942" elapsed="0.000480"/>
</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-10-06T01:24:46.052654" elapsed="0.000510"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:46.054390" elapsed="0.000573"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:46.049162" elapsed="0.005890"/>
</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-10-06T01:24:46.048590" elapsed="0.006592"/>
</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="PASS" start="2026-10-06T01:24:45.937111" elapsed="0.118148"/>
</kw>
<msg time="2026-10-06T01:24:46.055342" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:46.055381" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.936485" elapsed="0.118931"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:46.055573" elapsed="0.000031"/>
</return>
<status status="PASS" start="2026-10-06T01:24:46.055485" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.055468" elapsed="0.000190"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.056033" elapsed="0.000024"/>
</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-10-06T01:24:46.056341" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:46.056407" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:24:45.935867" elapsed="0.120625"/>
</kw>
<msg time="2026-10-06T01:24:46.056575" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:46.056614" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.933873" elapsed="0.122776"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.057078" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:46.056827" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.056807" elapsed="0.000345"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:45.933696" elapsed="0.123477"/>
</iter>
<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-10-06T01:24:46.059660" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:46.059576" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.059559" elapsed="0.000186"/>
</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-10-06T01:24:46.060959" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:46.060858" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.060841" elapsed="0.000180"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:46.061403" level="INFO">${karaf_connection_index} = 226</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-10-06T01:24:46.061175" elapsed="0.000253"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:46.061802" 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-10-06T01:24:46.061587" elapsed="0.000239"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:46.103574" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:46.062442" elapsed="0.041323"/>
</kw>
<msg time="2026-10-06T01:24:46.103947" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:46.103990" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.061996" elapsed="0.042028"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:46.177487" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CA
 "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:46.104604" elapsed="0.073103"/>
</kw>
<msg time="2026-10-06T01:24:46.177920" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:46.177965" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.104187" elapsed="0.073813"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.178338" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:46.178087" elapsed="0.000326"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.178063" elapsed="0.000375"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:46.179048" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CA
 "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:46.178619" elapsed="0.000511"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.179400" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:46.179193" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.179176" elapsed="0.000339"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:46.179548" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:46.182219" elapsed="0.000518"/>
</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-10-06T01:24:46.184022" elapsed="0.000588"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:46.186044" elapsed="0.000343"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:46.180439" elapsed="0.006017"/>
</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-10-06T01:24:46.179898" elapsed="0.006679"/>
</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="PASS" start="2026-10-06T01:24:46.060515" elapsed="0.126149"/>
</kw>
<msg time="2026-10-06T01:24:46.186824" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:46.186865" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.059933" elapsed="0.126967"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:46.187093" elapsed="0.000032"/>
</return>
<status status="PASS" start="2026-10-06T01:24:46.186985" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.186967" elapsed="0.000213"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.187501" elapsed="0.000024"/>
</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-10-06T01:24:46.187867" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:46.187947" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:46.059285" elapsed="0.128751"/>
</kw>
<msg time="2026-10-06T01:24:46.188122" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:46.188160" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.057415" elapsed="0.130781"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.188481" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:46.188264" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.188248" elapsed="0.000305"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:46.057281" elapsed="0.131294"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:45.820997" elapsed="0.367608"/>
</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-10-06T01:24:45.818829" elapsed="0.369831"/>
</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-10-06T01:24:45.816923" elapsed="0.371918"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:45.816455" elapsed="0.372432"/>
</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-10-06T01:24:45.815445" elapsed="0.373512"/>
</kw>
<kw name="Check Ovsdb Shards Status After Cluster Event" owner="ClusterOvsdb">
<msg time="2026-10-06T01:24:46.190645" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>${new_cluster_list}</arg>
<doc>Check Shard Status after some cluster event.</doc>
<status status="FAIL" start="2026-10-06T01:24:46.189147" elapsed="0.001550">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Create original cluster list and check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:24:45.814950" elapsed="0.375893">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s1-s2-t15" name="Check Entity Owner Status And Find Owner and Candidate After Fail" line="80">
<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-10-06T01:24:46.192447" elapsed="0.000222"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:24:46.192200" elapsed="0.000547"/>
</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-10-06T01:24:46.193699" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:46.193594" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.193576" elapsed="0.000187"/>
</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-10-06T01:24:46.195635" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:46.195553" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.195537" elapsed="0.000182"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:46.196628" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:46.196297" elapsed="0.000356"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:46.197126" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:46.196821" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:46.197192" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:24:46.197316" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:46.195936" elapsed="0.001403"/>
</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-10-06T01:24:46.201239" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:46.201154" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.201135" elapsed="0.000170"/>
</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-10-06T01:24:46.202489" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:46.202405" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.202388" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:46.202967" level="INFO">${karaf_connection_index} = 222</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-10-06T01:24:46.202715" elapsed="0.000306"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:46.203363" 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-10-06T01:24:46.203186" elapsed="0.000201"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:46.238039" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:46.203984" elapsed="0.034232"/>
</kw>
<msg time="2026-10-06T01:24:46.238388" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:46.238430" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.203539" elapsed="0.034926"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:46.343978" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:46.239085" elapsed="0.105109"/>
</kw>
<msg time="2026-10-06T01:24:46.344370" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:46.344411" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.238627" elapsed="0.105819"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.344791" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:46.344530" elapsed="0.000334"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.344506" elapsed="0.000382"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:46.345469" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:46.345085" elapsed="0.000477"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.345840" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:46.345623" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.345606" elapsed="0.000346"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:46.345984" elapsed="0.000031"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:46.348560" elapsed="0.000565"/>
</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-10-06T01:24:46.350400" elapsed="0.000578"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:46.352202" elapsed="0.000317"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:46.346826" elapsed="0.005772"/>
</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-10-06T01:24:46.346285" elapsed="0.006650"/>
</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="PASS" start="2026-10-06T01:24:46.202137" elapsed="0.150878"/>
</kw>
<msg time="2026-10-06T01:24:46.353096" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:46.353136" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.201458" elapsed="0.151713"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:46.353329" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:46.353244" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.353227" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:24:46.353749" elapsed="0.000024"/>
</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-10-06T01:24:46.354145" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:46.354210" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:46.200817" elapsed="0.153479"/>
</kw>
<msg time="2026-10-06T01:24:46.354383" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:46.354422" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.197695" elapsed="0.156762"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.354885" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:46.354530" elapsed="0.000420"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.354510" elapsed="0.000469"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:46.197534" elapsed="0.157477"/>
</iter>
<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-10-06T01:24:46.400424" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:46.400290" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.400255" elapsed="0.000255"/>
</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-10-06T01:24:46.401865" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:46.401780" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.401763" elapsed="0.000181"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:46.402341" level="INFO">${karaf_connection_index} = 224</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-10-06T01:24:46.402090" elapsed="0.000277"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:46.402726" 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-10-06T01:24:46.402532" elapsed="0.000219"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:46.441321" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:46.403393" elapsed="0.038124"/>
</kw>
<msg time="2026-10-06T01:24:46.441698" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:46.441742" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.402976" elapsed="0.038806"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:46.547333" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:46.442425" elapsed="0.105143"/>
</kw>
<msg time="2026-10-06T01:24:46.547795" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:46.547840" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.441986" elapsed="0.105892"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.548228" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:46.547983" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.547956" elapsed="0.000373"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:46.548928" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:46.548512" elapsed="0.000519"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.549312" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:46.549093" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.549076" elapsed="0.000334"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:46.549505" elapsed="0.000041"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:46.552251" elapsed="0.000521"/>
</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-10-06T01:24:46.554056" elapsed="0.000477"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:46.555968" elapsed="0.000311"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:46.550425" elapsed="0.005922"/>
</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-10-06T01:24:46.549860" elapsed="0.006605"/>
</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="PASS" start="2026-10-06T01:24:46.401494" elapsed="0.155049"/>
</kw>
<msg time="2026-10-06T01:24:46.556629" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:46.556670" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.400724" elapsed="0.156001"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:46.556886" elapsed="0.000041"/>
</return>
<status status="PASS" start="2026-10-06T01:24:46.556797" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.556779" elapsed="0.000204"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.557315" elapsed="0.000023"/>
</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-10-06T01:24:46.557620" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:46.557780" 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="PASS" start="2026-10-06T01:24:46.399789" elapsed="0.158083"/>
</kw>
<msg time="2026-10-06T01:24:46.557983" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:46.558025" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.355281" elapsed="0.202781"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.558355" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:46.558134" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.558116" elapsed="0.000310"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:46.355138" elapsed="0.203310"/>
</iter>
<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-10-06T01:24:46.561162" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:46.561076" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.561057" elapsed="0.000169"/>
</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-10-06T01:24:46.562425" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:46.562323" elapsed="0.000147"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.562306" elapsed="0.000185"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:46.562941" level="INFO">${karaf_connection_index} = 226</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-10-06T01:24:46.562636" elapsed="0.000335"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:46.563355" 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-10-06T01:24:46.563151" elapsed="0.000228"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:46.596993" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:46.563999" elapsed="0.033175"/>
</kw>
<msg time="2026-10-06T01:24:46.597337" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:46.597379" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.563536" elapsed="0.033879"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:46.692821" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:46.598085" elapsed="0.094948"/>
</kw>
<msg time="2026-10-06T01:24:46.693197" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:46.693238" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.597606" elapsed="0.095668"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.693553" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:46.693345" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.693327" elapsed="0.000320"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:46.694208" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:46.693850" elapsed="0.000451"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.694582" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:46.694361" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.694345" elapsed="0.000354"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:46.694731" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:46.697227" elapsed="0.000532"/>
</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-10-06T01:24:46.699129" elapsed="0.000451"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:46.700930" elapsed="0.000305"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:46.695509" elapsed="0.005812"/>
</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-10-06T01:24:46.695018" elapsed="0.006427"/>
</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="PASS" start="2026-10-06T01:24:46.562060" elapsed="0.139462"/>
</kw>
<msg time="2026-10-06T01:24:46.701604" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:46.701643" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.561377" elapsed="0.140371"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:46.701929" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:24:46.701827" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.701809" elapsed="0.000198"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.702322" elapsed="0.000024"/>
</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-10-06T01:24:46.702621" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:46.702701" 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="PASS" start="2026-10-06T01:24:46.560745" elapsed="0.142045"/>
</kw>
<msg time="2026-10-06T01:24:46.702873" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:46.702930" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.558732" elapsed="0.144236"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.703274" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:46.703037" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.703021" elapsed="0.000366"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:46.558575" elapsed="0.144837"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:46.197389" elapsed="0.506052"/>
</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-10-06T01:24:46.195263" elapsed="0.508234"/>
</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-10-06T01:24:46.193308" elapsed="0.510244"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.192892" elapsed="0.510704"/>
</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-10-06T01:24:46.191819" elapsed="0.511826"/>
</kw>
<kw name="Get Ovsdb Entity Owner Status For One Device" owner="ClusterOvsdb">
<msg time="2026-10-06T01:24:46.707690" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<var>${new_owner}</var>
<var>${new_candidate_list}</var>
<arg>ovsdb://uuid/${ovsdb_uuid}</arg>
<arg>${original_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Check Entity Owner Status and identify owner and successors for an ovs device ${device}. Request is sent to controller ${controller_index}.</doc>
<status status="FAIL" start="2026-10-06T01:24:46.706455" elapsed="0.001272">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Get From List" owner="Collections">
<var>${new_candidate}</var>
<arg>${new_candidate_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.707905" elapsed="0.000034"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_owner}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.708122" elapsed="0.000019"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_candidate}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.708309" elapsed="0.000019"/>
</kw>
<doc>Check Entity Owner Status and identify owner and candidate.</doc>
<status status="FAIL" start="2026-10-06T01:24:46.191226" elapsed="0.517238">Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s1-s2-t16" name="Create Bridge Manually and Verify After Fail" line="90">
<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-10-06T01:24:46.710139" elapsed="0.000201"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:24:46.709869" elapsed="0.000520"/>
</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-10-06T01:24:46.711306" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:46.711215" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.711198" elapsed="0.000190"/>
</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-10-06T01:24:46.713317" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:46.713234" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.713218" elapsed="0.000162"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:46.714301" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:46.713972" elapsed="0.000354"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:46.714763" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:46.714477" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:46.714828" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:24:46.714974" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:46.713584" elapsed="0.001413"/>
</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-10-06T01:24:46.717545" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:46.717459" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.717441" elapsed="0.000168"/>
</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-10-06T01:24:46.718755" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:46.718646" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.718629" elapsed="0.000189"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:46.719202" level="INFO">${karaf_connection_index} = 222</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-10-06T01:24:46.718977" elapsed="0.000252"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:46.719587" 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-10-06T01:24:46.719411" elapsed="0.000200"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:46.753495" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:46.720215" elapsed="0.033546"/>
</kw>
<msg time="2026-10-06T01:24:46.753989" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:46.754032" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.719782" elapsed="0.034287"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:46.828764" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:46.754723" elapsed="0.074244"/>
</kw>
<msg time="2026-10-06T01:24:46.829130" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:46.829171" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.754254" elapsed="0.074953"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.829528" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:46.829288" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.829265" elapsed="0.000365"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:46.830207" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:46.829837" elapsed="0.000457"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.830556" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:46.830357" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.830339" elapsed="0.000312"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:46.830703" elapsed="0.000034"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:46.833336" elapsed="0.000510"/>
</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-10-06T01:24:46.835103" elapsed="0.000466"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:46.836968" elapsed="0.000314"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:46.831565" elapsed="0.005784"/>
</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-10-06T01:24:46.831049" elapsed="0.006417"/>
</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="PASS" start="2026-10-06T01:24:46.718387" elapsed="0.119157"/>
</kw>
<msg time="2026-10-06T01:24:46.837641" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:46.837738" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.717772" elapsed="0.120004"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:46.837949" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:46.837848" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.837831" elapsed="0.000197"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:24:46.838353" elapsed="0.000024"/>
</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-10-06T01:24:46.838655" elapsed="0.000065"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:46.838765" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:46.717161" elapsed="0.121700"/>
</kw>
<msg time="2026-10-06T01:24:46.838980" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:46.839021" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.715331" elapsed="0.123727"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.839383" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:46.839164" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.839146" elapsed="0.000308"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:46.715191" elapsed="0.124284"/>
</iter>
<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-10-06T01:24:46.842201" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:46.842117" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.842099" elapsed="0.000165"/>
</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-10-06T01:24:46.843391" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:46.843307" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.843290" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:46.843853" level="INFO">${karaf_connection_index} = 224</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-10-06T01:24:46.843597" elapsed="0.000281"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:46.844233" 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-10-06T01:24:46.844055" elapsed="0.000202"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:46.876409" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:46.844888" elapsed="0.031713"/>
</kw>
<msg time="2026-10-06T01:24:46.876783" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:46.876825" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.844414" elapsed="0.032446"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:46.953036" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:46.877462" elapsed="0.075756"/>
</kw>
<msg time="2026-10-06T01:24:46.953373" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:46.953414" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.877041" elapsed="0.076409"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.953747" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:46.953520" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.953502" elapsed="0.000344"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:46.954376" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:46.954042" elapsed="0.000421"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.954737" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:46.954523" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.954507" elapsed="0.000323"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:46.954860" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:46.957320" elapsed="0.000518"/>
</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-10-06T01:24:46.959085" elapsed="0.000448"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:46.960828" elapsed="0.000330"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:46.955625" elapsed="0.005599"/>
</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-10-06T01:24:46.955139" elapsed="0.006233"/>
</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="PASS" start="2026-10-06T01:24:46.843045" elapsed="0.118405"/>
</kw>
<msg time="2026-10-06T01:24:46.961532" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:46.961571" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.842412" elapsed="0.119195"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:46.962028" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-10-06T01:24:46.961930" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.961660" elapsed="0.000449"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.962443" elapsed="0.000025"/>
</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-10-06T01:24:46.962763" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:46.962832" 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="PASS" start="2026-10-06T01:24:46.841784" elapsed="0.121153"/>
</kw>
<msg time="2026-10-06T01:24:46.963026" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:46.963066" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.839768" elapsed="0.123333"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:46.963395" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:46.963170" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.963155" elapsed="0.000311"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:46.839592" elapsed="0.123896"/>
</iter>
<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-10-06T01:24:46.966147" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:46.966062" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.966045" elapsed="0.000165"/>
</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-10-06T01:24:46.967338" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:46.967253" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:46.967236" elapsed="0.000188"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:46.967829" level="INFO">${karaf_connection_index} = 226</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-10-06T01:24:46.967571" elapsed="0.000283"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:46.968207" 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-10-06T01:24:46.968031" elapsed="0.000201"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:47.001800" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:46.968811" elapsed="0.033192"/>
</kw>
<msg time="2026-10-06T01:24:47.002173" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:47.002216" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.968385" elapsed="0.033868"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:47.107321" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:47.002859" elapsed="0.104669"/>
</kw>
<msg time="2026-10-06T01:24:47.107716" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:47.107759" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.002419" elapsed="0.105377"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.108132" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:47.107925" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.107892" elapsed="0.000336"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:47.108764" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:47.108407" elapsed="0.000445"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.109128" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:47.108928" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.108897" elapsed="0.000326"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:47.109253" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:47.111781" elapsed="0.000494"/>
</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-10-06T01:24:47.113529" elapsed="0.000499"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:47.115505" elapsed="0.000332"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:47.110062" elapsed="0.005842"/>
</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-10-06T01:24:47.109532" elapsed="0.006531"/>
</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="PASS" start="2026-10-06T01:24:46.966995" elapsed="0.149145"/>
</kw>
<msg time="2026-10-06T01:24:47.116221" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:47.116262" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.966386" elapsed="0.149912"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:47.116452" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:47.116367" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.116350" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.116950" elapsed="0.000024"/>
</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-10-06T01:24:47.117254" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:47.117318" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:46.965742" elapsed="0.151661"/>
</kw>
<msg time="2026-10-06T01:24:47.117485" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:47.117526" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.963783" elapsed="0.153779"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.117868" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:47.117629" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.117613" elapsed="0.000342"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:46.963602" elapsed="0.154374"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:46.715048" elapsed="0.402956"/>
</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-10-06T01:24:46.712940" elapsed="0.405118"/>
</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-10-06T01:24:46.710957" elapsed="0.407153"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:46.710534" elapsed="0.407632"/>
</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-10-06T01:24:46.709486" elapsed="0.408745"/>
</kw>
<kw name="Create Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:24:47.121264" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Create bridge br-s1 using OVS command and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:24:47.119933" elapsed="0.001370">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Create bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:24:46.708882" elapsed="0.412570">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s1-s2-t17" name="Add Port Manually and Verify After Fail" line="94">
<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-10-06T01:24:47.122989" elapsed="0.000201"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:24:47.122724" elapsed="0.000516"/>
</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-10-06T01:24:47.124182" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:47.124096" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.124079" elapsed="0.000166"/>
</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-10-06T01:24:47.126233" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:47.126137" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.126117" elapsed="0.000186"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:47.127281" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:47.126933" elapsed="0.000374"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:47.127778" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:47.127484" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:47.127853" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:24:47.128090" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:47.126528" elapsed="0.001586"/>
</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-10-06T01:24:47.130691" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:47.130592" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.130575" elapsed="0.000181"/>
</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-10-06T01:24:47.131860" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:47.131775" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.131758" elapsed="0.000181"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:47.132308" level="INFO">${karaf_connection_index} = 222</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-10-06T01:24:47.132082" elapsed="0.000251"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:47.132667" 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-10-06T01:24:47.132495" elapsed="0.000213"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:47.168615" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:47.133288" elapsed="0.035534"/>
</kw>
<msg time="2026-10-06T01:24:47.168996" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:47.169039" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.132862" elapsed="0.036213"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:47.247402" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:47.169704" elapsed="0.077904"/>
</kw>
<msg time="2026-10-06T01:24:47.247802" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:47.247844" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.169240" elapsed="0.078640"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.248215" elapsed="0.000078"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:47.247981" elapsed="0.000368"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.247952" elapsed="0.000423"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:47.248942" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:47.248557" elapsed="0.000474"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.249291" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:47.249094" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.249077" elapsed="0.000319"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:47.249440" elapsed="0.000034"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:47.252092" elapsed="0.000486"/>
</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-10-06T01:24:47.253840" elapsed="0.000490"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:47.255554" elapsed="0.000670"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:47.250306" elapsed="0.005988"/>
</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-10-06T01:24:47.249773" elapsed="0.006662"/>
</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="PASS" start="2026-10-06T01:24:47.131494" elapsed="0.125022"/>
</kw>
<msg time="2026-10-06T01:24:47.256602" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:47.256642" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.130903" elapsed="0.125793"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:47.256855" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:47.256769" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.256751" elapsed="0.000197"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:24:47.257279" elapsed="0.000025"/>
</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-10-06T01:24:47.257727" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:47.257797" elapsed="0.000018"/>
</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="PASS" start="2026-10-06T01:24:47.130302" elapsed="0.127587"/>
</kw>
<msg time="2026-10-06T01:24:47.257993" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:47.258034" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.128448" elapsed="0.129625"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.258362" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:47.258143" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.258127" elapsed="0.000307"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:47.128309" elapsed="0.130148"/>
</iter>
<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-10-06T01:24:47.261143" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:47.261058" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.261041" elapsed="0.000166"/>
</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-10-06T01:24:47.262331" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:47.262247" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.262230" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:47.262794" level="INFO">${karaf_connection_index} = 224</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-10-06T01:24:47.262540" elapsed="0.000279"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:47.263214" 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-10-06T01:24:47.263031" elapsed="0.000208"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:47.295574" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:47.263853" elapsed="0.031938"/>
</kw>
<msg time="2026-10-06T01:24:47.295964" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:47.296007" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.263417" elapsed="0.032626"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:47.380392" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:47.296625" elapsed="0.083967"/>
</kw>
<msg time="2026-10-06T01:24:47.380786" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:47.380828" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.296207" elapsed="0.084657"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.381199" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:47.380969" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.380938" elapsed="0.000360"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:47.381859" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:47.381483" elapsed="0.000478"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.382221" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:47.382024" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.382007" elapsed="0.000307"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:47.382345" elapsed="0.000030"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:47.384942" elapsed="0.000477"/>
</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-10-06T01:24:47.386708" elapsed="0.000490"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:47.388597" elapsed="0.000347"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:47.383182" elapsed="0.005830"/>
</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-10-06T01:24:47.382634" elapsed="0.006497"/>
</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="PASS" start="2026-10-06T01:24:47.261988" elapsed="0.127220"/>
</kw>
<msg time="2026-10-06T01:24:47.389292" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:47.389332" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.261354" elapsed="0.128014"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:47.389524" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:47.389438" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.389421" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.390027" elapsed="0.000024"/>
</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-10-06T01:24:47.390329" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:47.390433" 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="PASS" start="2026-10-06T01:24:47.260745" elapsed="0.129780"/>
</kw>
<msg time="2026-10-06T01:24:47.390611" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:47.390652" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.258755" elapsed="0.131949"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.391011" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:47.390776" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.390759" elapsed="0.000324"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:47.258574" elapsed="0.132532"/>
</iter>
<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-10-06T01:24:47.393789" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:47.393697" elapsed="0.000135"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.393658" 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-10-06T01:24:47.395007" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:47.394899" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.394879" elapsed="0.000192"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:47.395443" level="INFO">${karaf_connection_index} = 226</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-10-06T01:24:47.395212" elapsed="0.000255"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:47.395820" 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-10-06T01:24:47.395627" elapsed="0.000217"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:47.435037" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:47.396458" elapsed="0.038757"/>
</kw>
<msg time="2026-10-06T01:24:47.435393" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:47.435435" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.396038" elapsed="0.039433"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:47.518333" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:47.436118" elapsed="0.082400"/>
</kw>
<msg time="2026-10-06T01:24:47.518699" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:47.518744" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.435634" elapsed="0.083145"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.519070" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:47.518850" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.518832" elapsed="0.000333"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:47.519722" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:47.519342" elapsed="0.000465"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.520081" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:47.519868" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.519851" elapsed="0.000322"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:47.520202" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:47.522724" elapsed="0.000497"/>
</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-10-06T01:24:47.524484" elapsed="0.000502"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:47.526372" elapsed="0.000327"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:47.521017" elapsed="0.005751"/>
</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-10-06T01:24:47.520465" elapsed="0.006419"/>
</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="PASS" start="2026-10-06T01:24:47.394591" elapsed="0.132385"/>
</kw>
<msg time="2026-10-06T01:24:47.527059" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:47.527098" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.394015" elapsed="0.133119"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:47.527287" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:47.527203" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.527186" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.527788" elapsed="0.000025"/>
</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-10-06T01:24:47.528108" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:47.528172" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:47.393371" elapsed="0.134888"/>
</kw>
<msg time="2026-10-06T01:24:47.528343" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:47.528383" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.391361" elapsed="0.137057"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.528719" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:47.528485" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.528470" elapsed="0.000320"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:47.391225" elapsed="0.137585"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:47.128166" elapsed="0.400671"/>
</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-10-06T01:24:47.125798" elapsed="0.403104"/>
</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-10-06T01:24:47.123820" elapsed="0.405168"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.123389" elapsed="0.405646"/>
</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-10-06T01:24:47.122372" elapsed="0.406718"/>
</kw>
<kw name="Add Sample Port To The Manual Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:24:47.532062" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Add Port vx1 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:24:47.530750" elapsed="0.001347">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Add port with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:24:47.121818" elapsed="0.410421">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s1-s2-t18" name="Delete the Bridge Manually and Verify After Fail" line="98">
<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-10-06T01:24:47.533797" elapsed="0.000214"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:24:47.533534" elapsed="0.000527"/>
</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-10-06T01:24:47.534995" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:47.534888" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.534870" elapsed="0.000189"/>
</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-10-06T01:24:47.537012" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:47.536909" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.536892" elapsed="0.000183"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:47.538044" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:47.537695" elapsed="0.000375"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:47.538493" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:47.538221" elapsed="0.000296"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:47.538558" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:24:47.538699" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:47.537283" elapsed="0.001440"/>
</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-10-06T01:24:47.541308" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:47.541221" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.541202" elapsed="0.000171"/>
</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-10-06T01:24:47.542499" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:47.542413" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.542395" elapsed="0.000168"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:47.542978" level="INFO">${karaf_connection_index} = 222</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-10-06T01:24:47.542729" elapsed="0.000274"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:47.543336" 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-10-06T01:24:47.543164" elapsed="0.000196"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:47.578305" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:47.543958" elapsed="0.034525"/>
</kw>
<msg time="2026-10-06T01:24:47.578642" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:47.578702" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.543514" elapsed="0.035232"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:47.677317" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:47.579379" elapsed="0.098163"/>
</kw>
<msg time="2026-10-06T01:24:47.677752" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:47.677795" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.578923" elapsed="0.098908"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.678165" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:47.677930" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.677891" elapsed="0.000389"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:47.678858" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:47.678466" elapsed="0.000501"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.679228" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:47.679030" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.679013" elapsed="0.000309"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:47.679355" elapsed="0.000031"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:47.681972" elapsed="0.000480"/>
</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-10-06T01:24:47.683715" elapsed="0.000542"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:47.685459" elapsed="0.000334"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:47.680218" elapsed="0.005642"/>
</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-10-06T01:24:47.679649" elapsed="0.006344"/>
</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="PASS" start="2026-10-06T01:24:47.542129" elapsed="0.143941"/>
</kw>
<msg time="2026-10-06T01:24:47.686155" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:47.686195" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.541520" elapsed="0.144712"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:47.686389" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:47.686303" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.686285" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:24:47.686806" elapsed="0.000024"/>
</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-10-06T01:24:47.687126" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:47.687192" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:24:47.540886" elapsed="0.146392"/>
</kw>
<msg time="2026-10-06T01:24:47.687370" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:47.687426" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.539074" elapsed="0.148392"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.687788" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:47.687539" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.687523" elapsed="0.000339"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:47.538934" elapsed="0.148950"/>
</iter>
<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-10-06T01:24:47.692232" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:47.692145" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.692126" elapsed="0.000169"/>
</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-10-06T01:24:47.693399" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:47.693314" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.693297" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:47.693863" level="INFO">${karaf_connection_index} = 224</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-10-06T01:24:47.693605" elapsed="0.000284"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:47.694243" 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-10-06T01:24:47.694066" elapsed="0.000201"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:47.730806" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:47.694880" elapsed="0.036141"/>
</kw>
<msg time="2026-10-06T01:24:47.731181" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:47.731230" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.694446" elapsed="0.036821"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:47.815619" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:47.731901" elapsed="0.083957"/>
</kw>
<msg time="2026-10-06T01:24:47.816157" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:47.816200" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.731445" elapsed="0.084791"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.816570" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:47.816326" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.816299" elapsed="0.000368"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:47.817294" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:47.816870" elapsed="0.000513"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.817646" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:47.817446" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.817429" elapsed="0.000338"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:47.817800" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:47.820433" elapsed="0.000517"/>
</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-10-06T01:24:47.822196" elapsed="0.000458"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:47.824027" elapsed="0.000315"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:47.818656" elapsed="0.005753"/>
</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-10-06T01:24:47.818123" elapsed="0.006408"/>
</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="PASS" start="2026-10-06T01:24:47.693055" elapsed="0.131555"/>
</kw>
<msg time="2026-10-06T01:24:47.824716" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:47.824773" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.692443" elapsed="0.132370"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:47.824987" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:47.824886" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.824869" elapsed="0.000196"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.825387" elapsed="0.000024"/>
</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-10-06T01:24:47.825719" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:47.825786" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:47.691831" elapsed="0.134042"/>
</kw>
<msg time="2026-10-06T01:24:47.825977" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:47.826019" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.688154" elapsed="0.137902"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.826370" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:47.826128" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.826112" elapsed="0.000332"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:47.688015" elapsed="0.138451"/>
</iter>
<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-10-06T01:24:47.829248" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:47.829163" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.829146" elapsed="0.000165"/>
</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-10-06T01:24:47.830456" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:47.830373" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.830356" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:47.831074" level="INFO">${karaf_connection_index} = 226</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-10-06T01:24:47.830661" elapsed="0.000438"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:47.831436" 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-10-06T01:24:47.831260" elapsed="0.000200"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:47.869802" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:47.832090" elapsed="0.037909"/>
</kw>
<msg time="2026-10-06T01:24:47.870158" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:47.870201" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.831613" elapsed="0.038623"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:47.958200" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:47.870840" elapsed="0.087547"/>
</kw>
<msg time="2026-10-06T01:24:47.958545" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:47.958587" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.870400" elapsed="0.088222"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.958935" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:47.958715" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.958695" elapsed="0.000335"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:47.959583" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:47.959214" elapsed="0.000457"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.959981" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:47.959753" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.959735" elapsed="0.000340"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:47.960105" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:47.962553" elapsed="0.000522"/>
</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-10-06T01:24:47.964319" elapsed="0.000479"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:47.966201" elapsed="0.000326"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:47.960883" elapsed="0.005713"/>
</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-10-06T01:24:47.960370" elapsed="0.006365"/>
</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="PASS" start="2026-10-06T01:24:47.830116" elapsed="0.136698"/>
</kw>
<msg time="2026-10-06T01:24:47.966898" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:47.966959" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.829457" elapsed="0.137541"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:47.967155" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:47.967069" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.967051" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.967585" elapsed="0.000025"/>
</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-10-06T01:24:47.968001" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:47.968069" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:24:47.828844" elapsed="0.139312"/>
</kw>
<msg time="2026-10-06T01:24:47.968240" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:47.968279" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.826859" elapsed="0.141456"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:47.968602" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:47.968383" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.968367" elapsed="0.000322"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:47.826588" elapsed="0.142124"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:47.538775" elapsed="0.429966"/>
</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-10-06T01:24:47.536591" elapsed="0.432204"/>
</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-10-06T01:24:47.534597" elapsed="0.434251"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.534205" elapsed="0.434690"/>
</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-10-06T01:24:47.533193" elapsed="0.435768"/>
</kw>
<kw name="Delete Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:24:47.971887" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Delete bridge br-s1 using OVS command and verify it gets applied in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:24:47.970542" elapsed="0.001396">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Delete bridge with OVS command and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:24:47.532582" elapsed="0.439499">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s1-s2-t19" name="Create Bridge In Owner and Verify After Fail" line="102">
<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-10-06T01:24:47.973646" elapsed="0.000218"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:24:47.973400" elapsed="0.000530"/>
</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-10-06T01:24:47.974867" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:47.974779" elapsed="0.000133"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.974762" elapsed="0.000185"/>
</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-10-06T01:24:47.976857" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:47.976772" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.976756" elapsed="0.000177"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:47.977843" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:47.977498" elapsed="0.000371"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:47.978305" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:47.978035" elapsed="0.000295"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:47.978371" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:24:47.978497" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:47.977141" elapsed="0.001378"/>
</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-10-06T01:24:47.981121" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:47.981036" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.981018" elapsed="0.000167"/>
</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-10-06T01:24:47.982359" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:47.982268" elapsed="0.000134"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:47.982251" elapsed="0.000171"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:47.982816" level="INFO">${karaf_connection_index} = 222</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-10-06T01:24:47.982565" elapsed="0.000275"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:47.983192" 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-10-06T01:24:47.983018" elapsed="0.000202"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:48.019135" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:47.983801" elapsed="0.035539"/>
</kw>
<msg time="2026-10-06T01:24:48.019516" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:48.019559" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.983372" elapsed="0.036223"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:48.100850" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:48.020335" elapsed="0.080747"/>
</kw>
<msg time="2026-10-06T01:24:48.101250" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:48.101292" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.019805" elapsed="0.081524"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:48.101633" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:48.101410" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.101387" elapsed="0.000370"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:48.102314" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:48.101961" elapsed="0.000442"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:48.102664" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:48.102466" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.102448" elapsed="0.000327"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:48.102808" elapsed="0.000030"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:48.105358" elapsed="0.000498"/>
</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-10-06T01:24:48.107193" elapsed="0.000467"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:48.108886" elapsed="0.000323"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:48.103624" elapsed="0.005653"/>
</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-10-06T01:24:48.103116" elapsed="0.006279"/>
</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="PASS" start="2026-10-06T01:24:47.981965" elapsed="0.127508"/>
</kw>
<msg time="2026-10-06T01:24:48.109559" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:48.109599" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.981333" elapsed="0.128302"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:48.109810" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:48.109722" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.109704" elapsed="0.000184"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:24:48.110272" elapsed="0.000024"/>
</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-10-06T01:24:48.110626" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:48.110725" 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="PASS" start="2026-10-06T01:24:47.980728" elapsed="0.130089"/>
</kw>
<msg time="2026-10-06T01:24:48.110904" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:48.110959" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.978899" elapsed="0.132096"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:48.111284" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:48.111065" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.111049" elapsed="0.000305"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:47.978758" elapsed="0.132618"/>
</iter>
<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-10-06T01:24:48.114152" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:48.114067" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.114049" elapsed="0.000167"/>
</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-10-06T01:24:48.115337" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:48.115253" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.115236" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:48.115988" level="INFO">${karaf_connection_index} = 224</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-10-06T01:24:48.115607" elapsed="0.000406"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:48.116349" 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-10-06T01:24:48.116174" elapsed="0.000199"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:48.154448" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:48.116973" elapsed="0.037647"/>
</kw>
<msg time="2026-10-06T01:24:48.154813" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:48.154855" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.116524" elapsed="0.038367"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:48.232314" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:48.155492" elapsed="0.077032"/>
</kw>
<msg time="2026-10-06T01:24:48.232721" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:48.232764" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.155074" elapsed="0.077727"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:48.233138" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:48.232884" elapsed="0.000326"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.232860" elapsed="0.000376"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:48.233805" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:48.233420" elapsed="0.000473"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:48.234168" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:48.233970" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.233953" elapsed="0.000355"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:48.234341" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:48.236936" elapsed="0.000477"/>
</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-10-06T01:24:48.238651" elapsed="0.000503"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:48.240522" elapsed="0.000331"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:48.235197" elapsed="0.005739"/>
</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-10-06T01:24:48.234642" elapsed="0.006414"/>
</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="PASS" start="2026-10-06T01:24:48.114994" elapsed="0.126140"/>
</kw>
<msg time="2026-10-06T01:24:48.241220" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:48.241259" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.114362" elapsed="0.126934"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:48.241453" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:48.241367" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.241350" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:48.241948" elapsed="0.000025"/>
</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-10-06T01:24:48.242252" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:48.242317" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:24:48.113755" elapsed="0.128648"/>
</kw>
<msg time="2026-10-06T01:24:48.242489" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:48.242529" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.111628" elapsed="0.130936"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:48.242868" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:48.242633" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.242617" elapsed="0.000336"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:48.111491" elapsed="0.131483"/>
</iter>
<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-10-06T01:24:48.245613" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:48.245529" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.245511" elapsed="0.000178"/>
</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-10-06T01:24:48.246795" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:48.246709" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.246670" elapsed="0.000188"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:48.247245" level="INFO">${karaf_connection_index} = 226</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-10-06T01:24:48.247013" elapsed="0.000257"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:48.247603" 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-10-06T01:24:48.247430" elapsed="0.000197"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:48.279536" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:48.248255" elapsed="0.031470"/>
</kw>
<msg time="2026-10-06T01:24:48.279898" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:48.280006" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.247799" elapsed="0.032245"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:48.376731" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:48.280699" elapsed="0.096234"/>
</kw>
<msg time="2026-10-06T01:24:48.377093" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:48.377134" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.280254" elapsed="0.096916"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:48.377447" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:48.377241" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.377223" elapsed="0.000317"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:48.378103" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:48.377747" elapsed="0.000440"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:48.378445" elapsed="0.000018"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:48.378248" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.378231" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:48.378567" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:48.381028" elapsed="0.000473"/>
</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-10-06T01:24:48.382745" elapsed="0.000471"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:48.384408" elapsed="0.000326"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:48.379357" elapsed="0.005444"/>
</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-10-06T01:24:48.378848" elapsed="0.006084"/>
</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="PASS" start="2026-10-06T01:24:48.246431" elapsed="0.138579"/>
</kw>
<msg time="2026-10-06T01:24:48.385091" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:48.385130" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.245838" elapsed="0.139328"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:48.385318" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:48.385234" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.385217" elapsed="0.000177"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:48.385724" elapsed="0.000025"/>
</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-10-06T01:24:48.386042" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:48.386107" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:48.245229" elapsed="0.140964"/>
</kw>
<msg time="2026-10-06T01:24:48.386276" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:48.386316" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.243231" elapsed="0.143120"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:48.386634" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:48.386419" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.386403" elapsed="0.000351"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:48.243094" elapsed="0.143682"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:47.978582" elapsed="0.408221"/>
</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-10-06T01:24:47.976456" elapsed="0.410404"/>
</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-10-06T01:24:47.974500" elapsed="0.412412"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:47.974077" elapsed="0.412896"/>
</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-10-06T01:24:47.973033" elapsed="0.413993"/>
</kw>
<kw name="Create Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:24:48.391277" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Create bridge br01 in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:24:48.389969" elapsed="0.001345">Variable '${new_owner}' not found.</status>
</kw>
<doc>Create Bridge in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:24:47.972427" elapsed="0.419033">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s1-s2-t20" name="Create Port In Owner and Verify After Fail" line="106">
<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-10-06T01:24:48.393308" elapsed="0.000198"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:24:48.393060" elapsed="0.000496"/>
</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-10-06T01:24:48.394516" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:48.394430" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.394412" elapsed="0.000166"/>
</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-10-06T01:24:48.396510" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:48.396425" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.396408" elapsed="0.000163"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:48.397492" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:48.397168" elapsed="0.000350"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:48.397975" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:48.397669" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:48.398040" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:24:48.398166" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:48.396792" elapsed="0.001397"/>
</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-10-06T01:24:48.400727" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:48.400626" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.400609" elapsed="0.000181"/>
</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-10-06T01:24:48.401907" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:48.401823" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.401806" elapsed="0.000180"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:48.402357" level="INFO">${karaf_connection_index} = 222</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-10-06T01:24:48.402130" elapsed="0.000251"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:48.402736" 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-10-06T01:24:48.402544" elapsed="0.000216"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:48.436595" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:48.403365" elapsed="0.033465"/>
</kw>
<msg time="2026-10-06T01:24:48.437025" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:48.437066" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.402950" elapsed="0.034152"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:48.514421" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:48.437860" elapsed="0.076757"/>
</kw>
<msg time="2026-10-06T01:24:48.514810" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:48.514852" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.437359" elapsed="0.077530"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:48.515232" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:48.514996" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.514969" elapsed="0.000365"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:48.515901" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:48.515523" elapsed="0.000489"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:48.516276" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:48.516075" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.516058" elapsed="0.000331"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:48.516424" elapsed="0.000040"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:48.519075" elapsed="0.000488"/>
</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-10-06T01:24:48.520850" elapsed="0.000523"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:48.522879" elapsed="0.000359"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:48.517322" elapsed="0.005986"/>
</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-10-06T01:24:48.516776" elapsed="0.006650"/>
</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="PASS" start="2026-10-06T01:24:48.401541" elapsed="0.121964"/>
</kw>
<msg time="2026-10-06T01:24:48.523592" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:48.523632" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.400965" elapsed="0.122703"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:48.523908" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-10-06T01:24:48.523814" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.523796" elapsed="0.000206"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:24:48.524340" elapsed="0.000024"/>
</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-10-06T01:24:48.524651" elapsed="0.000039"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:48.524735" 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="PASS" start="2026-10-06T01:24:48.400337" elapsed="0.124488"/>
</kw>
<msg time="2026-10-06T01:24:48.524955" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:48.525022" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.398521" elapsed="0.126550"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:48.525467" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:48.525169" elapsed="0.000368"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.525146" elapsed="0.000424"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:48.398383" elapsed="0.127263"/>
</iter>
<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-10-06T01:24:48.528417" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:48.528332" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.528314" elapsed="0.000167"/>
</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-10-06T01:24:48.529574" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:48.529489" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.529472" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:48.530053" level="INFO">${karaf_connection_index} = 224</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-10-06T01:24:48.529802" elapsed="0.000276"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:48.530415" 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-10-06T01:24:48.530239" elapsed="0.000200"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:48.566585" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:48.531042" elapsed="0.035753"/>
</kw>
<msg time="2026-10-06T01:24:48.566968" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:48.567010" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.530591" elapsed="0.036455"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:48.651443" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:48.567628" elapsed="0.084081"/>
</kw>
<msg time="2026-10-06T01:24:48.651906" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:48.651965" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.567209" elapsed="0.084793"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:48.652367" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:48.652097" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.652069" elapsed="0.000401"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:48.653113" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:48.652659" elapsed="0.000543"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:48.653478" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:48.653264" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.653247" elapsed="0.000326"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:48.653608" elapsed="0.000038"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:48.656245" elapsed="0.000510"/>
</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-10-06T01:24:48.657987" elapsed="0.000471"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:48.659793" elapsed="0.000325"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:48.654507" elapsed="0.005677"/>
</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-10-06T01:24:48.653974" elapsed="0.006328"/>
</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="PASS" start="2026-10-06T01:24:48.529230" elapsed="0.131150"/>
</kw>
<msg time="2026-10-06T01:24:48.660464" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:48.660504" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.528628" elapsed="0.131912"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:48.660799" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:48.660666" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.660648" elapsed="0.000229"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:48.661221" elapsed="0.000024"/>
</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-10-06T01:24:48.661527" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:48.661592" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:48.528027" elapsed="0.133781"/>
</kw>
<msg time="2026-10-06T01:24:48.661902" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:48.661963" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.526066" elapsed="0.135934"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:48.662291" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:48.662072" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.662055" elapsed="0.000308"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:48.525903" elapsed="0.136482"/>
</iter>
<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-10-06T01:24:48.665127" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:48.665041" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.665024" elapsed="0.000167"/>
</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-10-06T01:24:48.666283" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:48.666199" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.666183" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:48.666746" level="INFO">${karaf_connection_index} = 226</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-10-06T01:24:48.666489" elapsed="0.000282"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:48.667129" 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-10-06T01:24:48.666948" elapsed="0.000205"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:48.702781" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:48.667743" elapsed="0.035244"/>
</kw>
<msg time="2026-10-06T01:24:48.703144" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:48.703186" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.667309" elapsed="0.035912"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:48.782023" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:48.703828" elapsed="0.078374"/>
</kw>
<msg time="2026-10-06T01:24:48.782359" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:48.782400" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.703384" elapsed="0.079052"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:48.782749" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:48.782506" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.782487" elapsed="0.000358"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:48.783375" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:48.783041" elapsed="0.000455"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:48.783775" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:48.783559" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.783541" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:48.783900" elapsed="0.000040"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:48.786359" elapsed="0.000493"/>
</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-10-06T01:24:48.788090" elapsed="0.000453"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:48.789884" elapsed="0.000324"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:48.784672" elapsed="0.005601"/>
</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-10-06T01:24:48.784183" elapsed="0.006207"/>
</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="PASS" start="2026-10-06T01:24:48.665939" elapsed="0.124527"/>
</kw>
<msg time="2026-10-06T01:24:48.790547" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:48.790586" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.665338" elapsed="0.125284"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:48.790792" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:48.790706" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.790688" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:48.791198" elapsed="0.000024"/>
</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-10-06T01:24:48.791495" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:48.791559" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:48.664723" elapsed="0.126921"/>
</kw>
<msg time="2026-10-06T01:24:48.791745" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:48.791785" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.662646" elapsed="0.129174"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:48.792309" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:48.791888" elapsed="0.000472"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.791872" elapsed="0.000510"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:48.662508" elapsed="0.129895"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:48.398239" elapsed="0.394192"/>
</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-10-06T01:24:48.396132" elapsed="0.396357"/>
</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-10-06T01:24:48.394174" elapsed="0.398370"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.393720" elapsed="0.398869"/>
</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-10-06T01:24:48.392652" elapsed="0.399989"/>
</kw>
<kw name="Create Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:24:48.796667" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Add Port vx2 to bridge br01 in controller ${controller_index} and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:24:48.795486" elapsed="0.001532">Variable '${new_owner}' not found.</status>
</kw>
<doc>Create Port in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:24:48.392118" elapsed="0.405051">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s1-s2-t21" name="Modify the destination IP of Port In Owner After Fail" line="110">
<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-10-06T01:24:48.798662" elapsed="0.000218"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:24:48.798418" 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-10-06T01:24:48.799877" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:48.799792" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.799774" elapsed="0.000180"/>
</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-10-06T01:24:48.801834" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:48.801751" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.801735" elapsed="0.000161"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:48.802810" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:48.802465" elapsed="0.000370"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:48.803276" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:48.803003" elapsed="0.000296"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:48.803340" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:24:48.803466" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:48.802111" elapsed="0.001378"/>
</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-10-06T01:24:48.806036" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:48.805951" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.805903" 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-10-06T01:24:48.807204" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:48.807120" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.807103" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:48.807645" level="INFO">${karaf_connection_index} = 222</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-10-06T01:24:48.807407" elapsed="0.000262"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:48.808042" 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-10-06T01:24:48.807851" elapsed="0.000215"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:48.842143" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:48.808627" elapsed="0.033730"/>
</kw>
<msg time="2026-10-06T01:24:48.842529" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:48.842571" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.808218" elapsed="0.034389"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:48.937520" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:48.843282" elapsed="0.094456"/>
</kw>
<msg time="2026-10-06T01:24:48.937898" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:48.937953" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.842808" elapsed="0.095182"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:48.938279" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:48.938066" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.938046" elapsed="0.000328"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:48.938930" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:48.938556" elapsed="0.000467"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:48.939333" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:48.939132" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.939115" elapsed="0.000313"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:48.939461" elapsed="0.000031"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:48.942027" elapsed="0.000477"/>
</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-10-06T01:24:48.943776" elapsed="0.000485"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:48.945628" elapsed="0.000344"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:48.940305" elapsed="0.005735"/>
</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-10-06T01:24:48.939779" elapsed="0.006380"/>
</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="PASS" start="2026-10-06T01:24:48.806837" elapsed="0.139400"/>
</kw>
<msg time="2026-10-06T01:24:48.946321" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:48.946361" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.806245" elapsed="0.140151"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:48.946550" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:48.946465" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.946448" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:24:48.947051" elapsed="0.000025"/>
</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-10-06T01:24:48.947356" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:48.947421" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:24:48.805616" elapsed="0.141891"/>
</kw>
<msg time="2026-10-06T01:24:48.947593" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:48.947633" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.803833" elapsed="0.143836"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:48.947998" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:48.947757" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.947740" elapsed="0.000331"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:48.803694" elapsed="0.144398"/>
</iter>
<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-10-06T01:24:48.952092" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:48.952006" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.951988" elapsed="0.000167"/>
</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-10-06T01:24:48.953257" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:48.953173" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:48.953156" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:48.953711" level="INFO">${karaf_connection_index} = 224</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-10-06T01:24:48.953462" elapsed="0.000274"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:48.954094" 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-10-06T01:24:48.953898" elapsed="0.000220"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:48.985914" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:48.954701" elapsed="0.031415"/>
</kw>
<msg time="2026-10-06T01:24:48.986272" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:48.986346" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.954271" elapsed="0.032114"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:49.070579" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:48.987010" elapsed="0.083806"/>
</kw>
<msg time="2026-10-06T01:24:49.071007" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:49.071049" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.986549" elapsed="0.084536"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.071407" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:49.071169" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.071145" elapsed="0.000359"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:49.072093" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:49.071706" elapsed="0.000477"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.072440" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:49.072244" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.072227" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:49.072565" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:49.075159" elapsed="0.000482"/>
</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-10-06T01:24:49.076890" elapsed="0.000479"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:49.078540" elapsed="0.000561"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:49.073431" elapsed="0.005737"/>
</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-10-06T01:24:49.072902" elapsed="0.006381"/>
</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="PASS" start="2026-10-06T01:24:48.952899" elapsed="0.126461"/>
</kw>
<msg time="2026-10-06T01:24:49.079443" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:49.079483" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.952303" elapsed="0.127216"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:49.079689" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-10-06T01:24:49.079589" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.079572" elapsed="0.000198"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.080114" elapsed="0.000024"/>
</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-10-06T01:24:49.080416" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:49.080480" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:48.951671" elapsed="0.128895"/>
</kw>
<msg time="2026-10-06T01:24:49.080651" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:49.080784" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.948344" elapsed="0.132479"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.081171" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:49.080950" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.080931" elapsed="0.000312"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:48.948207" elapsed="0.133058"/>
</iter>
<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-10-06T01:24:49.083847" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:49.083764" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.083746" elapsed="0.000164"/>
</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-10-06T01:24:49.085031" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:49.084945" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.084913" elapsed="0.000181"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:49.085466" level="INFO">${karaf_connection_index} = 226</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-10-06T01:24:49.085236" elapsed="0.000255"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:49.085844" 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-10-06T01:24:49.085650" elapsed="0.000218"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:49.118702" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:49.086511" elapsed="0.032372"/>
</kw>
<msg time="2026-10-06T01:24:49.119062" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:49.119104" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.086040" elapsed="0.033101"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:49.205120" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:49.119746" elapsed="0.085564"/>
</kw>
<msg time="2026-10-06T01:24:49.205466" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:49.205507" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.119304" elapsed="0.086239"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.205837" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:49.205612" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.205594" elapsed="0.000354"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:49.206488" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:49.206153" elapsed="0.000424"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.206854" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:49.206637" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.206621" elapsed="0.000338"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:49.206990" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:49.209466" elapsed="0.000531"/>
</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-10-06T01:24:49.211204" elapsed="0.000445"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:49.213045" elapsed="0.000301"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:49.207766" elapsed="0.005645"/>
</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-10-06T01:24:49.207253" elapsed="0.006273"/>
</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="PASS" start="2026-10-06T01:24:49.084645" elapsed="0.128999"/>
</kw>
<msg time="2026-10-06T01:24:49.213744" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:49.213784" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.084073" elapsed="0.129747"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:49.213988" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:49.213888" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.213871" elapsed="0.000195"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.214375" elapsed="0.000024"/>
</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-10-06T01:24:49.214765" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:49.214834" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:49.083444" elapsed="0.131493"/>
</kw>
<msg time="2026-10-06T01:24:49.215023" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:49.215063" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.081521" elapsed="0.133577"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.215382" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:49.215166" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.215150" elapsed="0.000303"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:49.081383" elapsed="0.134091"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:48.803538" elapsed="0.411964"/>
</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-10-06T01:24:48.801438" elapsed="0.414117"/>
</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-10-06T01:24:48.799515" elapsed="0.416091"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:48.799129" elapsed="0.416520"/>
</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-10-06T01:24:48.798080" elapsed="0.417638"/>
</kw>
<kw name="Modify the destination IP of Sample Port" owner="ClusterOvsdb">
<msg time="2026-10-06T01:24:49.218588" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Modify the dst ip of port vx2 in bridge br01 in controller ${controller_index}.</doc>
<status status="FAIL" start="2026-10-06T01:24:49.217411" elapsed="0.001213">Variable '${new_owner}' not found.</status>
</kw>
<doc>Modify the dst ip of existing port in Owner.</doc>
<status status="FAIL" start="2026-10-06T01:24:48.797516" elapsed="0.421364">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s1-s2-t22" name="Verify Port Is Modified After Fail" line="114">
<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-10-06T01:24:49.220339" elapsed="0.000196"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:24:49.220097" elapsed="0.000486"/>
</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-10-06T01:24:49.221498" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:49.221412" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.221395" elapsed="0.000166"/>
</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-10-06T01:24:49.223445" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:49.223362" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.223346" elapsed="0.000160"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:49.224420" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:49.224096" elapsed="0.000350"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:49.224887" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:49.224595" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:49.224965" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:24:49.225092" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:49.223725" elapsed="0.001428"/>
</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-10-06T01:24:49.227664" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:49.227580" elapsed="0.000147"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.227563" elapsed="0.000185"/>
</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-10-06T01:24:49.228981" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:49.228881" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.228864" elapsed="0.000179"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:49.229408" level="INFO">${karaf_connection_index} = 222</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-10-06T01:24:49.229184" elapsed="0.000249"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:49.229781" 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-10-06T01:24:49.229592" elapsed="0.000213"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:49.263306" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:49.230387" elapsed="0.033129"/>
</kw>
<msg time="2026-10-06T01:24:49.263706" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:49.263749" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.229976" elapsed="0.033809"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:49.333394" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:49.264426" elapsed="0.069158"/>
</kw>
<msg time="2026-10-06T01:24:49.333766" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:49.333807" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.263982" elapsed="0.069861"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.334167" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:49.333944" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.333904" elapsed="0.000362"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:49.334812" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:49.334449" elapsed="0.000447"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.335171" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:49.334976" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.334958" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:49.335298" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:49.337864" elapsed="0.000489"/>
</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-10-06T01:24:49.339595" elapsed="0.000514"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:49.341308" elapsed="0.000316"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:49.336151" elapsed="0.005806"/>
</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-10-06T01:24:49.335597" elapsed="0.006483"/>
</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="PASS" start="2026-10-06T01:24:49.228599" elapsed="0.113560"/>
</kw>
<msg time="2026-10-06T01:24:49.342288" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:49.342329" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.227895" elapsed="0.114470"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:49.342529" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:49.342441" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.342424" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:24:49.342974" elapsed="0.000025"/>
</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-10-06T01:24:49.343281" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:49.343347" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:24:49.227292" elapsed="0.116142"/>
</kw>
<msg time="2026-10-06T01:24:49.343521" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:49.343562" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.225485" elapsed="0.118113"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.343988" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:49.343667" elapsed="0.000372"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.343651" elapsed="0.000410"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:49.225348" elapsed="0.118735"/>
</iter>
<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-10-06T01:24:49.346655" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:49.346570" elapsed="0.000147"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.346553" elapsed="0.000186"/>
</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-10-06T01:24:49.347853" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:49.347768" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.347750" elapsed="0.000183"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:49.348308" level="INFO">${karaf_connection_index} = 224</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-10-06T01:24:49.348078" elapsed="0.000255"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:49.348669" 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-10-06T01:24:49.348495" elapsed="0.000215"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:49.380304" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:49.349295" elapsed="0.031190"/>
</kw>
<msg time="2026-10-06T01:24:49.380641" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:49.380703" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.348866" elapsed="0.031873"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:49.446022" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:49.381341" elapsed="0.064875"/>
</kw>
<msg time="2026-10-06T01:24:49.446376" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:49.446420" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.380904" elapsed="0.065555"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.446767" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:49.446531" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.446512" elapsed="0.000350"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:49.447466" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:49.447119" elapsed="0.000430"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.447827" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:49.447610" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.447594" elapsed="0.000342"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:49.447968" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:49.450466" elapsed="0.000529"/>
</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-10-06T01:24:49.452217" elapsed="0.000450"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:49.454067" elapsed="0.000305"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:49.448770" elapsed="0.005668"/>
</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-10-06T01:24:49.448245" elapsed="0.006307"/>
</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="PASS" start="2026-10-06T01:24:49.347486" elapsed="0.107143"/>
</kw>
<msg time="2026-10-06T01:24:49.454730" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:49.454770" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.346888" elapsed="0.107918"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:49.454977" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:49.454876" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.454858" elapsed="0.000197"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.455368" elapsed="0.000024"/>
</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-10-06T01:24:49.455666" elapsed="0.000114"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:49.455823" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:49.346278" elapsed="0.109633"/>
</kw>
<msg time="2026-10-06T01:24:49.456024" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:49.456064" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.344340" elapsed="0.111759"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.456383" elapsed="0.000018"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:49.456167" elapsed="0.000263"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.456151" elapsed="0.000301"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:49.344202" elapsed="0.112270"/>
</iter>
<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-10-06T01:24:49.459162" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:49.459072" elapsed="0.000135"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.459053" elapsed="0.000175"/>
</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-10-06T01:24:49.460364" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:49.460280" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.460263" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:49.460831" level="INFO">${karaf_connection_index} = 226</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-10-06T01:24:49.460568" elapsed="0.000288"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:49.461215" 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-10-06T01:24:49.461037" elapsed="0.000202"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:49.493298" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:49.461868" elapsed="0.031611"/>
</kw>
<msg time="2026-10-06T01:24:49.493640" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:49.493706" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.461436" elapsed="0.032309"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:49.557868" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:49.494358" elapsed="0.063708"/>
</kw>
<msg time="2026-10-06T01:24:49.558223" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:49.558265" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.493909" elapsed="0.064390"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.558575" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:49.558370" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.558352" elapsed="0.000316"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:49.559235" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:49.558877" elapsed="0.000440"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.559574" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:49.559379" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.559362" elapsed="0.000304"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:49.559717" elapsed="0.000031"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:49.562260" elapsed="0.000523"/>
</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-10-06T01:24:49.564059" elapsed="0.000468"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:49.565958" elapsed="0.000315"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:49.560524" elapsed="0.005817"/>
</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-10-06T01:24:49.560025" elapsed="0.006433"/>
</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="PASS" start="2026-10-06T01:24:49.460023" elapsed="0.106511"/>
</kw>
<msg time="2026-10-06T01:24:49.566615" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:49.566655" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.459382" elapsed="0.107326"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:49.566863" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:49.566778" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.566761" elapsed="0.000195"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.567278" elapsed="0.000023"/>
</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-10-06T01:24:49.567576" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:49.567640" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:24:49.458733" elapsed="0.109088"/>
</kw>
<msg time="2026-10-06T01:24:49.567907" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:49.568001" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.456739" elapsed="0.111300"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.568328" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:49.568109" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.568093" elapsed="0.000306"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:49.456585" elapsed="0.111836"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:49.225205" elapsed="0.343248"/>
</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-10-06T01:24:49.223073" elapsed="0.345437"/>
</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-10-06T01:24:49.221161" elapsed="0.347403"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.220748" elapsed="0.347861"/>
</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-10-06T01:24:49.219744" elapsed="0.348916"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<msg time="2026-10-06T01:24:49.571565" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>${new_cluster_list}</arg>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:24:49.570281" elapsed="0.001319">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Verify port is modified in all instances.</doc>
<status status="FAIL" start="2026-10-06T01:24:49.219236" elapsed="0.352521">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s1-s2-t23" name="Start Old Candidate Instance" line="118">
<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-10-06T01:24:49.573217" elapsed="0.000197"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:24:49.572970" elapsed="0.000495"/>
</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-10-06T01:24:49.574371" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:49.574285" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.574269" elapsed="0.000164"/>
</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-10-06T01:24:49.576318" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:49.576236" elapsed="0.000123"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.576219" elapsed="0.000161"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:49.577337" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:49.576997" elapsed="0.000366"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:49.577801" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:49.577513" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:49.577865" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:24:49.578004" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:49.576582" elapsed="0.001444"/>
</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-10-06T01:24:49.580721" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:49.580622" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.580605" elapsed="0.000179"/>
</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-10-06T01:24:49.581896" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:49.581812" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.581795" elapsed="0.000180"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:49.582340" level="INFO">${karaf_connection_index} = 222</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-10-06T01:24:49.582116" elapsed="0.000248"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:49.582716" 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-10-06T01:24:49.582526" elapsed="0.000215"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:49.616872" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:49.583320" elapsed="0.033809"/>
</kw>
<msg time="2026-10-06T01:24:49.617290" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:49.617331" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.582894" elapsed="0.034473"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:49.680509" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "S "t "a "r "t "[C "O "l "d "[C "C "a "n "d "i "d "a "t "e "[78C[C "[A[78CI
 "n "s "t "a "n "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:49.617992" elapsed="0.062742"/>
</kw>
<msg time="2026-10-06T01:24:49.680914" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:49.680974" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.617531" elapsed="0.063480"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.681346" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:49.681104" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.681076" elapsed="0.000372"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:49.682035" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "S "t "a "r "t "[C "O "l "d "[C "C "a "n "d "i "d "a "t "e "[78C[C "[A[78CI
 "n "s "t "a "n "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:49.681630" elapsed="0.000488"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.682375" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:49.682180" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.682162" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:49.682503" elapsed="0.000035"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:49.685147" elapsed="0.000483"/>
</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-10-06T01:24:49.686911" elapsed="0.000498"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:49.688790" elapsed="0.000334"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:49.683396" elapsed="0.005796"/>
</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-10-06T01:24:49.682850" elapsed="0.006460"/>
</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="PASS" start="2026-10-06T01:24:49.581530" elapsed="0.107859"/>
</kw>
<msg time="2026-10-06T01:24:49.689475" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:49.689515" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.580948" elapsed="0.108603"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:49.689754" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:49.689622" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.689605" elapsed="0.000227"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:24:49.690182" elapsed="0.000024"/>
</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-10-06T01:24:49.690491" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:49.690558" 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="PASS" start="2026-10-06T01:24:49.580332" elapsed="0.110315"/>
</kw>
<msg time="2026-10-06T01:24:49.690778" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:49.690819" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.578366" elapsed="0.112493"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.691213" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:49.690991" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.690973" elapsed="0.000311"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:49.578226" elapsed="0.113080"/>
</iter>
<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-10-06T01:24:49.694035" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:49.693948" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.693916" elapsed="0.000182"/>
</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-10-06T01:24:49.695209" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:49.695124" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.695107" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:49.695647" level="INFO">${karaf_connection_index} = 224</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-10-06T01:24:49.695415" elapsed="0.000257"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:49.696051" 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-10-06T01:24:49.695852" elapsed="0.000223"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:49.730129" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:49.696642" elapsed="0.033676"/>
</kw>
<msg time="2026-10-06T01:24:49.730475" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:49.730517" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.696228" elapsed="0.034324"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:49.787808" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "S "t "a "r "t "[C "O "l "d "[C "C "a "n "d "i "d "a "t "e "[78C[C "[A[78CI
 "n "s "t "a "n "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:49.731180" elapsed="0.056820"/>
</kw>
<msg time="2026-10-06T01:24:49.788157" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:49.788197" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.730742" elapsed="0.057490"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.788507" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:49.788303" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.788285" elapsed="0.000316"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:49.789166" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "S "t "a "r "t "[C "O "l "d "[C "C "a "n "d "i "d "a "t "e "[78C[C "[A[78CI
 "n "s "t "a "n "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:49.788811" elapsed="0.000434"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.789502" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:49.789306" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.789289" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:49.789624" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:49.792117" elapsed="0.000473"/>
</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-10-06T01:24:49.793845" elapsed="0.000474"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:49.795519" elapsed="0.000557"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:49.790410" elapsed="0.005733"/>
</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-10-06T01:24:49.789908" elapsed="0.006352"/>
</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="PASS" start="2026-10-06T01:24:49.694848" elapsed="0.101523"/>
</kw>
<msg time="2026-10-06T01:24:49.796453" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:49.796492" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.694245" elapsed="0.102282"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:49.796698" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:24:49.796597" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.796580" elapsed="0.000197"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.797108" elapsed="0.000024"/>
</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-10-06T01:24:49.797407" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:49.797471" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:24:49.693619" elapsed="0.103936"/>
</kw>
<msg time="2026-10-06T01:24:49.797640" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:49.797724" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.691568" elapsed="0.106195"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.798069" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:49.797832" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.797816" elapsed="0.000324"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:49.691429" elapsed="0.106733"/>
</iter>
<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-10-06T01:24:49.800710" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:49.800604" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.800587" elapsed="0.000189"/>
</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-10-06T01:24:49.801882" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:49.801798" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.801781" elapsed="0.000181"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:49.802329" level="INFO">${karaf_connection_index} = 226</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-10-06T01:24:49.802103" elapsed="0.000251"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:49.802699" 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-10-06T01:24:49.802511" elapsed="0.000214"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:49.846181" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:49.803306" elapsed="0.043063"/>
</kw>
<msg time="2026-10-06T01:24:49.846524" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:49.846566" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.802878" elapsed="0.043722"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:49.904697" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "S "t "a "r "t "[C "O "l "d "[C "C "a "n "d "i "d "a "t "e "[78C[C "[A[78CI
 "n "s "t "a "n "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:49.847224" elapsed="0.057676"/>
</kw>
<msg time="2026-10-06T01:24:49.905100" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:49.905143" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.846787" elapsed="0.058391"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.905506" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:49.905264" elapsed="0.000360"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.905240" elapsed="0.000410"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:49.906362" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "S "t "a "r "t "[C "O "l "d "[C "C "a "n "d "i "d "a "t "e "[78C[C "[A[78CI
 "n "s "t "a "n "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:49.905858" elapsed="0.000585"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.906776" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:49.906507" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.906489" elapsed="0.000382"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:49.906905" elapsed="0.000050"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:49.909546" elapsed="0.000561"/>
</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-10-06T01:24:49.911378" elapsed="0.000484"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:49.913236" elapsed="0.000308"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:49.907864" elapsed="0.005747"/>
</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-10-06T01:24:49.907223" elapsed="0.006521"/>
</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="PASS" start="2026-10-06T01:24:49.801515" elapsed="0.112308"/>
</kw>
<msg time="2026-10-06T01:24:49.913905" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:49.913961" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.800939" elapsed="0.113059"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:49.914155" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:49.914069" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.914051" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.914553" elapsed="0.000024"/>
</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-10-06T01:24:49.914961" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:49.915028" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:24:49.800313" elapsed="0.114803"/>
</kw>
<msg time="2026-10-06T01:24:49.915202" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:49.915242" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.798407" elapsed="0.116870"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:49.915565" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:49.915347" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.915331" elapsed="0.000305"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:49.798272" elapsed="0.117387"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:49.578078" elapsed="0.337629"/>
</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-10-06T01:24:49.575945" elapsed="0.339821"/>
</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-10-06T01:24:49.574030" elapsed="0.341790"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.573610" elapsed="0.342256"/>
</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-10-06T01:24:49.572596" elapsed="0.343336"/>
</kw>
<kw name="Start_Single_Member" owner="ClusterManagement">
<msg time="2026-10-06T01:24:49.917730" level="FAIL">Variable '${original_candidate}' not found.</msg>
<arg>${original_candidate}</arg>
<doc>Convenience keyword that starts the specified member of the cluster.</doc>
<status status="FAIL" start="2026-10-06T01:24:49.916150" elapsed="0.001648">Variable '${original_candidate}' not found.</status>
</kw>
<doc>Start Owner Instance and verify it is active</doc>
<status status="FAIL" start="2026-10-06T01:24:49.572122" elapsed="0.345841">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s1-s2-t24" name="Check Shards Status After Recover" line="122">
<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-10-06T01:24:49.919462" elapsed="0.000201"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:24:49.919217" elapsed="0.000513"/>
</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-10-06T01:24:49.920636" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:49.920550" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.920533" elapsed="0.000183"/>
</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-10-06T01:24:49.922588" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:49.922506" elapsed="0.000123"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.922489" elapsed="0.000161"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:24:49.923576" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:24:49.923249" elapsed="0.000352"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:24:49.924055" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:24:49.923769" elapsed="0.000310"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:24:49.924120" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:24:49.924246" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:24:49.922875" elapsed="0.001393"/>
</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-10-06T01:24:49.926826" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:49.926696" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.926665" elapsed="0.000225"/>
</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-10-06T01:24:49.928008" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:49.927908" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:49.927891" elapsed="0.000181"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:49.928443" level="INFO">${karaf_connection_index} = 222</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-10-06T01:24:49.928214" elapsed="0.000253"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:49.928823" 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-10-06T01:24:49.928628" elapsed="0.000237"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:49.963106" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:49.929442" elapsed="0.033840"/>
</kw>
<msg time="2026-10-06T01:24:49.963451" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:49.963493" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.929032" elapsed="0.034496"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:50.030241" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CA
 "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:49.964153" elapsed="0.066267"/>
</kw>
<msg time="2026-10-06T01:24:50.030588" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:50.030629" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.963712" elapsed="0.066952"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:50.030980" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:50.030760" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:50.030740" elapsed="0.000336"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:50.031664" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CA
 "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:50.031323" elapsed="0.000441"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:50.032037" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:50.031826" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:50.031809" elapsed="0.000323"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:50.032162" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:50.034618" elapsed="0.000520"/>
</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-10-06T01:24:50.036367" elapsed="0.000480"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:50.038226" elapsed="0.000303"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:50.032953" elapsed="0.005641"/>
</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-10-06T01:24:50.032424" elapsed="0.006302"/>
</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="PASS" start="2026-10-06T01:24:49.927627" elapsed="0.111177"/>
</kw>
<msg time="2026-10-06T01:24:50.038885" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:50.038941" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.927058" elapsed="0.111920"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:50.039132" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:50.039047" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:50.039030" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:24:50.039522" elapsed="0.000023"/>
</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-10-06T01:24:50.039909" elapsed="0.000041"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:50.039993" 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="PASS" start="2026-10-06T01:24:49.926393" elapsed="0.113687"/>
</kw>
<msg time="2026-10-06T01:24:50.040163" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:50.040203" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.924599" elapsed="0.115639"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:50.040521" elapsed="0.000018"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:50.040305" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:50.040289" elapsed="0.000301"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:24:49.924462" elapsed="0.116149"/>
</iter>
<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-10-06T01:24:50.044357" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:50.044272" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:50.044255" elapsed="0.000165"/>
</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-10-06T01:24:50.045520" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:50.045437" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:50.045420" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:50.045987" level="INFO">${karaf_connection_index} = 224</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-10-06T01:24:50.045747" elapsed="0.000265"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:50.046342" 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-10-06T01:24:50.046172" elapsed="0.000194"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:50.078428" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:50.047005" elapsed="0.031613"/>
</kw>
<msg time="2026-10-06T01:24:50.078796" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:50.078838" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:50.046551" elapsed="0.032323"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:50.154694" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CA
 "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:50.079473" elapsed="0.075418"/>
</kw>
<msg time="2026-10-06T01:24:50.155080" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:50.155122" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:50.079054" elapsed="0.076104"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:50.155468" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:50.155239" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:50.155217" elapsed="0.000346"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:50.156147" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CA
 "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:50.155765" elapsed="0.000465"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:50.156488" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:50.156292" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:50.156276" elapsed="0.000304"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:50.156612" elapsed="0.000030"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:50.159145" elapsed="0.000471"/>
</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-10-06T01:24:50.160860" elapsed="0.000474"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:50.162512" elapsed="0.000347"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:50.157435" elapsed="0.005506"/>
</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-10-06T01:24:50.156916" elapsed="0.006142"/>
</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="PASS" start="2026-10-06T01:24:50.045179" elapsed="0.117955"/>
</kw>
<msg time="2026-10-06T01:24:50.163217" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:50.163256" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:50.044567" elapsed="0.118725"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:50.163447" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:24:50.163362" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:50.163345" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:50.164067" elapsed="0.000024"/>
</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-10-06T01:24:50.164367" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:50.164431" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:24:50.043980" elapsed="0.120537"/>
</kw>
<msg time="2026-10-06T01:24:50.164602" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:50.164696" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:50.040874" elapsed="0.123860"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:50.165035" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:50.164805" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:50.164789" elapsed="0.000318"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:24:50.040737" elapsed="0.124391"/>
</iter>
<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-10-06T01:24:50.167750" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:50.167649" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:50.167631" elapsed="0.000183"/>
</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-10-06T01:24:50.168965" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:24:50.168866" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:50.168843" elapsed="0.000185"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:24:50.169399" level="INFO">${karaf_connection_index} = 226</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-10-06T01:24:50.169170" elapsed="0.000254"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:24:50.169775" 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-10-06T01:24:50.169583" elapsed="0.000217"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:24:50.202773" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:24:50.170380" elapsed="0.032596"/>
</kw>
<msg time="2026-10-06T01:24:50.203132" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:24:50.203173" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:50.169970" elapsed="0.033239"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:24:50.265873" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CA
 "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:24:50.203812" elapsed="0.062245"/>
</kw>
<msg time="2026-10-06T01:24:50.266211" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:24:50.266253" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:50.203372" elapsed="0.062916"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:50.266555" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:50.266357" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:50.266339" elapsed="0.000309"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:24:50.267206" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CA
 "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:24:50.266854" elapsed="0.000433"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:50.267543" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:50.267348" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:50.267332" elapsed="0.000302"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:24:50.267664" elapsed="0.000043"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:24:50.270129" elapsed="0.000470"/>
</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-10-06T01:24:50.271826" elapsed="0.000467"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:24:50.273459" elapsed="0.000574"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:24:50.268455" elapsed="0.005683"/>
</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-10-06T01:24:50.267968" elapsed="0.006286"/>
</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="PASS" start="2026-10-06T01:24:50.168564" elapsed="0.105767"/>
</kw>
<msg time="2026-10-06T01:24:50.274413" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:50.274452" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:50.167979" elapsed="0.106509"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:24:50.274642" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:24:50.274556" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:50.274539" elapsed="0.000198"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:50.275068" elapsed="0.000024"/>
</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-10-06T01:24:50.275367" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:24:50.275431" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:24:50.167352" elapsed="0.108164"/>
</kw>
<msg time="2026-10-06T01:24:50.275599" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:24:50.275639" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:50.165381" elapsed="0.110379"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:50.276068" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:24:50.275833" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:24:50.275817" elapsed="0.000323"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:24:50.165244" elapsed="0.110918"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:24:49.924319" elapsed="0.351871"/>
</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-10-06T01:24:49.922216" elapsed="0.354027"/>
</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-10-06T01:24:49.920293" elapsed="0.356003"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:24:49.919874" elapsed="0.356463"/>
</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-10-06T01:24:49.918860" elapsed="0.357526"/>
</kw>
<kw name="Check Ovsdb Shards Status After Cluster Event" owner="ClusterOvsdb">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:24:50.285008" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:24:50.284757" elapsed="0.000285">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:24:50.284348" elapsed="0.000806">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:24:50.285202" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:24:50.281481" elapsed="0.003763"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:24:50.281115" elapsed="0.004215">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:50.285541" elapsed="0.000021"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:50.285781" elapsed="0.000023"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:50.286056" elapsed="0.000023"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:24:50.277436" elapsed="0.008727">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:24:51.303841" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:24:51.303306" elapsed="0.000638">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:24:51.302368" elapsed="0.001831">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:24:51.304310" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:24:51.295862" elapsed="0.008549"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:24:51.295009" elapsed="0.009595">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:51.305156" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:51.305641" elapsed="0.000080"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:51.306167" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:24:51.286950" elapsed="0.019451">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:24:52.324645" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:24:52.324147" elapsed="0.000611">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:24:52.323209" elapsed="0.001820">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:24:52.325142" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:24:52.316656" elapsed="0.008582"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:24:52.315799" elapsed="0.009632">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:52.325978" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:52.326468" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:52.326993" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:24:52.307229" elapsed="0.020000">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:24:53.345417" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:24:53.344888" elapsed="0.000609">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:24:53.343716" elapsed="0.002173">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:24:53.346025" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:24:53.336948" elapsed="0.009181"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:24:53.336076" elapsed="0.010244">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:53.346837" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:53.347344" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:53.347844" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:24:53.328034" elapsed="0.020072">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:24:54.359386" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:24:54.359073" elapsed="0.000364">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:24:54.358492" elapsed="0.001097">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:24:54.359659" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:24:54.354482" elapsed="0.005261"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:24:54.353967" elapsed="0.005895">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:54.360191" elapsed="0.000029"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:54.360491" elapsed="0.000031"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:54.360803" elapsed="0.000030"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:24:54.348655" elapsed="0.012307">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:24:55.378547" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:24:55.378055" elapsed="0.000571">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:24:55.377123" elapsed="0.001772">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:24:55.379026" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:24:55.370573" elapsed="0.008550"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:24:55.369733" elapsed="0.009576">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:55.380056" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:55.380628" elapsed="0.000080"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:55.381179" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:24:55.361662" elapsed="0.019755">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:24:56.399801" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:24:56.399275" elapsed="0.000606">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:24:56.398175" elapsed="0.001971">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:24:56.400256" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:24:56.391461" elapsed="0.008891"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:24:56.390600" elapsed="0.009941">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:56.401077" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:56.401557" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:56.402074" elapsed="0.000053"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:24:56.382159" elapsed="0.020180">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:24:57.419667" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:24:57.419176" elapsed="0.000600">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:24:57.418252" elapsed="0.001780">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:24:57.420141" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:24:57.411782" elapsed="0.008455"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:24:57.410925" elapsed="0.009501">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:57.420956" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:57.421438" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:57.421958" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:24:57.403091" elapsed="0.019100">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:24:58.440083" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:24:58.439541" elapsed="0.000620">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:24:58.438608" elapsed="0.001783">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:24:58.440497" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:24:58.432171" elapsed="0.008421"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:24:58.431308" elapsed="0.009512">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:58.441331" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:58.441877" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:58.442381" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:24:58.423056" elapsed="0.019556">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:24:59.454475" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:24:59.454140" elapsed="0.000392">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:24:59.453513" elapsed="0.001209">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:24:59.454799" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:24:59.449176" elapsed="0.005690"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:24:59.448582" elapsed="0.006451">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:59.455379" elapsed="0.000031"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:59.455733" elapsed="0.000034"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:24:59.456090" elapsed="0.000033"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:24:59.443261" elapsed="0.012987">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:00.474499" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:00.474002" elapsed="0.000610">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:00.473066" elapsed="0.001921">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:00.475139" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:00.466580" elapsed="0.008673"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:00.465732" elapsed="0.009828">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:00.476114" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:00.476608" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:00.477139" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:00.457003" elapsed="0.020396">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:01.495629" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:01.495125" elapsed="0.000613">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:01.494163" elapsed="0.001844">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:01.496118" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:01.487537" elapsed="0.008679"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:01.486493" elapsed="0.009909">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:01.497027" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:01.497519" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:01.498034" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:01.478271" elapsed="0.019992">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:02.517439" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:02.516881" elapsed="0.000646">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:02.515874" elapsed="0.001940">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:02.517934" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:02.508815" elapsed="0.009245"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:02.507879" elapsed="0.010386">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:02.518827" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:02.519369" elapsed="0.000054"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:02.519912" elapsed="0.000183"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:02.499122" elapsed="0.021183">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:03.538095" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:03.537538" elapsed="0.000640">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:03.536606" elapsed="0.001819">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:03.538537" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:03.530126" elapsed="0.008510"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:03.529246" elapsed="0.009618">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:03.539395" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:03.539908" elapsed="0.000070"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:03.540400" elapsed="0.000046"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:03.521181" elapsed="0.019449">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:04.558936" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:04.558404" elapsed="0.000637">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:04.557466" elapsed="0.001818">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:04.559396" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:04.550909" elapsed="0.008584"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:04.550053" elapsed="0.009659">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:04.560233" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:04.560743" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:04.561233" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:04.541491" elapsed="0.019971">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:05.579032" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:05.578450" elapsed="0.000662">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:05.577470" elapsed="0.001999">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:05.579582" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:05.570888" elapsed="0.008820"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:05.570053" elapsed="0.009849">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:05.580411" elapsed="0.000045"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:05.581058" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:05.581529" elapsed="0.000046"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:05.562170" elapsed="0.019623">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:06.600248" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:06.599732" elapsed="0.000592">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:06.598771" elapsed="0.001785">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:06.600674" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:06.591869" elapsed="0.008938"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:06.590999" elapsed="0.010019">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:06.601501" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:06.602055" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:06.602537" elapsed="0.000055"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:06.582412" elapsed="0.020403">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:07.620003" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:07.619459" elapsed="0.000621">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:07.618530" elapsed="0.001774">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:07.620407" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:07.612019" elapsed="0.008480"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:07.611170" elapsed="0.009542">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:07.621213" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:07.621807" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:07.622296" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:07.603435" elapsed="0.019094">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:08.640155" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:08.639612" elapsed="0.000619">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:08.638707" elapsed="0.001752">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:08.640562" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:08.632274" elapsed="0.008380"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:08.631398" elapsed="0.009480">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:08.641374" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:08.641871" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:08.642362" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:08.623188" elapsed="0.019404">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:09.653636" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:09.653327" elapsed="0.000382">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:09.652763" elapsed="0.001100">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:09.653930" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:09.648764" elapsed="0.005248"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:09.648241" elapsed="0.005891">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:09.654442" elapsed="0.000028"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:09.654758" elapsed="0.000031"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:09.655068" elapsed="0.000030"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:09.643213" elapsed="0.011998">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:10.675888" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:10.675358" elapsed="0.000630">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:10.674424" elapsed="0.001802">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:10.676334" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:10.667754" elapsed="0.008675"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:10.666782" elapsed="0.009837">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:10.677150" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:10.677626" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:10.678153" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:10.655989" elapsed="0.022394">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:11.695781" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:11.695268" elapsed="0.000591">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:11.694342" elapsed="0.001765">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:11.696214" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:11.687844" elapsed="0.008464"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:11.687010" elapsed="0.009485">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:11.697027" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:11.697505" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:11.698026" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:11.679068" elapsed="0.019193">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:12.716096" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:12.715550" elapsed="0.000621">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:12.714623" elapsed="0.001774">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:12.716623" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:12.708105" elapsed="0.008656"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:12.707153" elapsed="0.009927">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:12.717557" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:12.718078" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:12.718547" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:12.698913" elapsed="0.019896">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:13.736203" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:13.735666" elapsed="0.000612">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:13.734765" elapsed="0.001735">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:13.736603" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:13.728243" elapsed="0.008482"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:13.727395" elapsed="0.009522">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:13.737415" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:13.737916" elapsed="0.000071"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:13.738408" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:13.719530" elapsed="0.019108">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:14.756170" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:14.755620" elapsed="0.000626">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:14.754716" elapsed="0.001754">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:14.756576" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:14.748286" elapsed="0.008385"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:14.747432" elapsed="0.009462">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:14.757391" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:14.757893" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:14.758434" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:14.739310" elapsed="0.019463">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:15.775978" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:15.775426" elapsed="0.000630">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:15.774491" elapsed="0.001794">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:15.776392" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:15.768061" elapsed="0.008425"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:15.767209" elapsed="0.009464">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:15.777222" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:15.777723" elapsed="0.000053"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:15.778220" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:15.759421" elapsed="0.019030">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:16.796030" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:16.795486" elapsed="0.000623">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:16.794559" elapsed="0.001779">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:16.796443" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:16.788144" elapsed="0.008394"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:16.787289" elapsed="0.009468">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:16.797273" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:16.797773" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:16.798271" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:16.779154" elapsed="0.019349">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:17.815554" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:17.815070" elapsed="0.000559">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:17.814132" elapsed="0.001752">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:17.816103" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:17.807729" elapsed="0.008472"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:17.806878" elapsed="0.009510">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:17.816898" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:17.817390" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:17.817897" elapsed="0.000072"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:17.799149" elapsed="0.019008">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:18.835969" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:18.835424" elapsed="0.000623">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:18.834375" elapsed="0.001897">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:18.836375" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:18.827927" elapsed="0.008544"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:18.827088" elapsed="0.009571">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:18.837192" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:18.837665" elapsed="0.000082"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:18.838193" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:18.818806" elapsed="0.019619">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:19.856173" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:19.855563" elapsed="0.000687">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:19.854623" elapsed="0.001853">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:19.856579" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:19.848090" elapsed="0.008585"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:19.846996" elapsed="0.009901">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:19.857399" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:19.857900" elapsed="0.000070"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:19.858476" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:19.839103" elapsed="0.019636">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:20.867369" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:20.867138" elapsed="0.000271">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:20.866723" elapsed="0.000800">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:20.867577" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:20.863797" elapsed="0.003825"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:20.863368" elapsed="0.004359">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:20.867975" elapsed="0.000022"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:20.868196" elapsed="0.000023"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:20.868407" elapsed="0.000021"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:20.859308" elapsed="0.009203">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:21.886122" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:21.885564" elapsed="0.000638">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:21.884636" elapsed="0.001804">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:21.886547" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:21.878190" elapsed="0.008454"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:21.877319" elapsed="0.009551">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:21.887384" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:21.887896" elapsed="0.000072"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:21.888392" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:21.869293" elapsed="0.019333">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:22.906719" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:22.906193" elapsed="0.000609">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:22.905257" elapsed="0.001927">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:22.907298" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:22.898762" elapsed="0.008633"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:22.897890" elapsed="0.009697">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:22.908135" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:22.908620" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:22.909155" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:22.889498" elapsed="0.019895">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:23.926726" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:23.926208" elapsed="0.000601">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:23.925275" elapsed="0.001787">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:23.927172" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:23.918778" elapsed="0.008492"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:23.917925" elapsed="0.009536">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:23.927999" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:23.928481" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:23.929004" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:23.910125" elapsed="0.019114">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:24.947629" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:24.947128" elapsed="0.000614">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:24.946177" elapsed="0.001824">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:24.948115" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:24.939417" elapsed="0.008795"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:24.938539" elapsed="0.009865">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:24.949111" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:24.949603" elapsed="0.000122"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:24.950186" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:24.930073" elapsed="0.020347">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:25.969393" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:25.968851" elapsed="0.000631">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:25.967917" elapsed="0.001872">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:25.969913" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:25.961132" elapsed="0.008913"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:25.960183" elapsed="0.010058">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:25.970804" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:25.971323" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:25.971824" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:25.951544" elapsed="0.020538">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:26.990642" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:26.990133" elapsed="0.000623">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:26.989197" elapsed="0.001837">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:26.991150" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:26.982556" elapsed="0.008693"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:26.981630" elapsed="0.009808">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:26.991991" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:26.992474" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:26.992995" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:26.972998" elapsed="0.020229">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:28.010537" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:28.010053" elapsed="0.000559">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:28.009128" elapsed="0.001741">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:28.010995" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:28.002622" elapsed="0.008470"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:28.001814" elapsed="0.009470">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:28.011789" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:28.012290" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:28.012788" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:27.994039" elapsed="0.019012">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:29.030862" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:29.030344" elapsed="0.000614">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:29.029398" elapsed="0.001790">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:29.031290" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:29.022788" elapsed="0.008595"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:29.021894" elapsed="0.009677">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:29.032107" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:29.032581" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:29.033114" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:29.013674" elapsed="0.019676">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:30.050496" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:30.050011" elapsed="0.000562">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:30.049081" elapsed="0.001751">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:30.050960" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:30.042642" elapsed="0.008419"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:30.041815" elapsed="0.009535">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:30.051863" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:30.052359" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:30.052862" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:30.034040" elapsed="0.019086">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:31.071309" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:31.070802" elapsed="0.000585">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:31.069876" elapsed="0.001738">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:31.071751" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:31.063188" elapsed="0.008658"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:31.062328" elapsed="0.009727">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:31.072540" elapsed="0.000045"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:31.073060" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:31.073529" elapsed="0.000046"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:31.053859" elapsed="0.019929">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:32.091463" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:32.090975" elapsed="0.000562">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:32.090046" elapsed="0.001743">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:32.091896" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:32.083491" elapsed="0.008534"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:32.082624" elapsed="0.009591">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:32.092721" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:32.093222" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:32.093723" elapsed="0.000136"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:32.074418" elapsed="0.019666">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:33.111628" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:33.111147" elapsed="0.000586">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:33.110218" elapsed="0.001812">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:33.112138" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:33.103774" elapsed="0.008456"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:33.102924" elapsed="0.009493">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:33.112920" elapsed="0.000067"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:33.113414" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:33.113916" elapsed="0.000071"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:33.094771" elapsed="0.019404">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:34.131438" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:34.130902" elapsed="0.000614">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:34.129989" elapsed="0.001784">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:34.131882" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:34.123498" elapsed="0.008503"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:34.122647" elapsed="0.009544">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:34.132665" elapsed="0.000076"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:34.133196" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:34.133661" elapsed="0.000078"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:34.114844" elapsed="0.019082">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:35.154070" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:35.153531" elapsed="0.000615">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:35.152594" elapsed="0.001862">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:35.154561" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:35.146117" elapsed="0.008538"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:35.145260" elapsed="0.009616">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:35.155389" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:35.155987" elapsed="0.000055"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:35.156463" elapsed="0.000046"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:35.134572" elapsed="0.022156">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:36.173920" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:36.173376" elapsed="0.000643">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:36.172433" elapsed="0.001814">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:36.174355" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:36.165961" elapsed="0.008489"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:36.165116" elapsed="0.009525">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:36.175221" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:36.175732" elapsed="0.000053"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:36.176396" elapsed="0.000052"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:36.157318" elapsed="0.019318">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:37.194673" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:37.194181" elapsed="0.000602">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:37.193245" elapsed="0.001799">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:37.195155" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:37.186720" elapsed="0.008531"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:37.185850" elapsed="0.009588">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:37.196222" elapsed="0.000056"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:37.196874" elapsed="0.000085"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:37.197393" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:37.177368" elapsed="0.020257">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:38.215623" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:38.215125" elapsed="0.000608">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:38.214181" elapsed="0.001815">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:38.216107" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:38.207424" elapsed="0.008781"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:38.206569" elapsed="0.009823">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:38.216943" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:38.217422" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:38.217948" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:38.198335" elapsed="0.019847">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:39.236554" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:39.236049" elapsed="0.000592">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:39.235105" elapsed="0.001838">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:39.237061" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:39.228456" elapsed="0.008707"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:39.227576" elapsed="0.009778">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:39.237886" elapsed="0.000068"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:39.238389" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:39.238899" elapsed="0.000068"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:39.219026" elapsed="0.020127">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:40.257154" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:40.256584" elapsed="0.000656">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:40.255635" elapsed="0.001853">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:40.257598" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:40.249003" elapsed="0.008727"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:40.247995" elapsed="0.009958">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:40.258458" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:40.259004" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:40.259480" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:40.239998" elapsed="0.019743">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:41.278369" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:41.277851" elapsed="0.000597">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:41.276932" elapsed="0.001782">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:41.278827" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:41.269778" elapsed="0.009170"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:41.268930" elapsed="0.010215">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:41.279642" elapsed="0.000077"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:41.280183" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:41.280657" elapsed="0.000078"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:41.260443" elapsed="0.020501">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:42.299094" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:42.298542" elapsed="0.000631">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:42.297607" elapsed="0.001807">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:42.299522" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:42.290886" elapsed="0.008733"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:42.290033" elapsed="0.010030">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:42.300565" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:42.301093" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:42.301564" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:42.281939" elapsed="0.019889">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:43.319592" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:43.319106" elapsed="0.000560">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:43.318168" elapsed="0.001781">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:43.320246" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:43.311648" elapsed="0.008701"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:43.310815" elapsed="0.009725">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:43.321091" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:43.321572" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:43.322103" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:43.302474" elapsed="0.019863">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:44.339784" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:44.339263" elapsed="0.000596">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:44.338324" elapsed="0.001781">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:44.340212" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:44.331763" elapsed="0.008545"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:44.330900" elapsed="0.009596">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:44.341029" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:44.341501" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:44.342016" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:44.323028" elapsed="0.019308">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:45.360363" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:45.359842" elapsed="0.000600">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:45.358892" elapsed="0.001782">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:45.360818" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:45.352297" elapsed="0.008645"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:45.351415" elapsed="0.009724">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:45.361626" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:45.362160" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:45.362630" elapsed="0.000075"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:45.343086" elapsed="0.019806">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:46.380488" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:46.379983" elapsed="0.000585">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:46.379051" elapsed="0.001800">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:46.380989" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:46.372552" elapsed="0.008539"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:46.371711" elapsed="0.009572">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:46.381827" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:46.382330" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:46.382821" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:46.363742" elapsed="0.019329">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:47.401059" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:47.400505" elapsed="0.000633">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:47.399568" elapsed="0.001804">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:47.401615" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:47.393057" elapsed="0.008691"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:47.392181" elapsed="0.009789">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:47.402467" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:47.402997" elapsed="0.000053"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:47.403472" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:47.383806" elapsed="0.019927">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:48.421235" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:48.420715" elapsed="0.000599">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:48.419786" elapsed="0.001768">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:48.421661" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:48.413248" elapsed="0.008545"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:48.412380" elapsed="0.009627">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:48.422499" elapsed="0.000045"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:48.423020" elapsed="0.000053"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:48.423562" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:48.404449" elapsed="0.019383">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:49.442421" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:49.441922" elapsed="0.000579">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:49.440994" elapsed="0.001777">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:49.442881" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:49.434366" elapsed="0.008658"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:49.433496" elapsed="0.009877">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:49.443987" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:49.444477" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:49.445094" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:49.424822" elapsed="0.020510">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:50.462428" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:50.461915" elapsed="0.000588">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:50.460989" elapsed="0.001776">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:50.462872" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:50.454548" elapsed="0.008444"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:50.453735" elapsed="0.009449">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:50.463658" elapsed="0.000082"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:50.464191" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:50.464650" elapsed="0.000078"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:50.446015" elapsed="0.018922">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:51.483275" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:51.482744" elapsed="0.000613">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:51.481817" elapsed="0.001785">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:51.483743" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:51.475276" elapsed="0.008568"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:51.474401" elapsed="0.009659">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:51.484559" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:51.485098" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:51.485561" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:51.465839" elapsed="0.019986">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:52.504311" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:52.503759" elapsed="0.000640">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:52.502828" elapsed="0.002003">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:52.504975" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:52.496248" elapsed="0.008832"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:52.495379" elapsed="0.009892">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:52.505820" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:52.506327" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:52.506820" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:52.487223" elapsed="0.019861">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:53.525197" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:53.524631" elapsed="0.000649">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:53.523723" elapsed="0.001791">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:53.525622" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:53.517199" elapsed="0.008552"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:53.516261" elapsed="0.009707">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:53.526466" elapsed="0.000045"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:53.526993" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:53.527470" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:53.507836" elapsed="0.019893">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:54.545239" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:54.544720" elapsed="0.000598">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:54.543799" elapsed="0.001754">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:54.545662" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:54.537343" elapsed="0.008447"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:54.536490" elapsed="0.009522">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:54.546661" elapsed="0.000078"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:54.547198" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:54.547665" elapsed="0.000079"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:54.528639" elapsed="0.019310">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:55.566157" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:55.565607" elapsed="0.000630">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:55.564701" elapsed="0.001770">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:55.566578" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:55.557855" elapsed="0.008820"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:55.556999" elapsed="0.010012">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:55.567505" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:55.568029" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:55.568495" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:55.548625" elapsed="0.020136">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:56.586483" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:56.585980" elapsed="0.000585">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:56.585052" elapsed="0.001794">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:56.586991" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:56.578511" elapsed="0.008580"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:56.577636" elapsed="0.009646">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:56.587846" elapsed="0.000067"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:56.588358" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:56.588883" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:56.569547" elapsed="0.019571">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:57.607659" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:57.607159" elapsed="0.000613">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:57.606223" elapsed="0.001815">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:57.608152" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:57.599730" elapsed="0.008525"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:57.598836" elapsed="0.009612">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:57.609010" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:57.609494" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:57.610019" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:57.590172" elapsed="0.020080">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:58.628118" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:58.627553" elapsed="0.000650">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:58.626626" elapsed="0.001834">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:58.628572" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:58.620134" elapsed="0.008539"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:58.619254" elapsed="0.009683">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:58.629446" elapsed="0.000045"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:58.629985" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:58.630453" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:58.611180" elapsed="0.019532">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:25:59.652030" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:25:59.651467" elapsed="0.000652">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:59.650540" elapsed="0.001832">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:25:59.652482" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:25:59.643962" elapsed="0.008619"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:25:59.643068" elapsed="0.009891">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:59.653458" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:59.653989" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:25:59.654459" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:25:59.631630" elapsed="0.023086">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:26:00.663587" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:26:00.663345" elapsed="0.000286">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:00.662951" elapsed="0.000823">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:26:00.663832" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:26:00.660029" elapsed="0.003865"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:00.659623" elapsed="0.004358">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:00.664223" elapsed="0.000021"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:00.664442" elapsed="0.000022"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:00.664652" elapsed="0.000021"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:26:00.655797" elapsed="0.008974">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:26:01.683930" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:26:01.683140" elapsed="0.000892">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:01.682194" elapsed="0.002077">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:26:01.684398" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:26:01.675466" elapsed="0.009033"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:01.674566" elapsed="0.010153">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:01.685244" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:01.685750" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:01.686247" elapsed="0.000149"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:26:01.665950" elapsed="0.020640">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:26:02.703964" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:26:02.703426" elapsed="0.000615">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:02.702496" elapsed="0.001769">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:26:02.704372" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:26:02.696065" elapsed="0.008400"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:02.695163" elapsed="0.009490">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:02.705195" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:02.705669" elapsed="0.000079"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:02.706201" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:26:02.687190" elapsed="0.019242">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:26:03.724138" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:26:03.723575" elapsed="0.000640">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:03.722637" elapsed="0.001805">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:26:03.724546" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:26:03.716217" elapsed="0.008424"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:03.715356" elapsed="0.009532">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:03.725380" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:03.725904" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:03.726377" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:26:03.707152" elapsed="0.019457">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:26:04.743920" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:26:04.743370" elapsed="0.000627">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:04.742434" elapsed="0.001889">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:26:04.744432" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:26:04.735960" elapsed="0.008568"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:04.735103" elapsed="0.009643">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:04.745320" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:04.745851" elapsed="0.000053"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:04.746326" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:26:04.727273" elapsed="0.019285">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:26:05.764252" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:26:05.763725" elapsed="0.000603">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:05.762790" elapsed="0.001762">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:26:05.764658" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:26:05.756322" elapsed="0.008465"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:05.755454" elapsed="0.009547">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:05.765476" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:05.766007" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:05.766487" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:26:05.747217" elapsed="0.019529">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:26:06.783968" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:26:06.783412" elapsed="0.000635">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:06.782474" elapsed="0.001798">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:26:06.784377" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:26:06.776046" elapsed="0.008428"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:06.775194" elapsed="0.009471">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:06.785198" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:06.785788" elapsed="0.000071"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:06.786288" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:26:06.767396" elapsed="0.019127">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:26:07.804717" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:26:07.804196" elapsed="0.000601">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:07.803259" elapsed="0.001794">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:26:07.805161" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:26:07.796422" elapsed="0.008836"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:07.795423" elapsed="0.010025">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:07.805981" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:07.806621" elapsed="0.000053"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:07.807167" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:26:07.787206" elapsed="0.020193">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:26:08.825066" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:26:08.824509" elapsed="0.000639">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:08.823566" elapsed="0.001823">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:26:08.825499" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:26:08.817091" elapsed="0.008507"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:08.816229" elapsed="0.009610">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:08.826333" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:08.826872" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:08.827348" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:26:08.808180" elapsed="0.019399">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:26:09.846411" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:26:09.845901" elapsed="0.000596">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:09.844967" elapsed="0.001813">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:26:09.846917" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:26:09.838237" elapsed="0.008782"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:09.837149" elapsed="0.010078">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:09.847756" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:09.848274" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:09.848779" elapsed="0.000069"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:26:09.828476" elapsed="0.020561">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:26:10.866181" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:26:10.865639" elapsed="0.000618">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:10.864745" elapsed="0.001736">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:26:10.866727" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:26:10.858299" elapsed="0.008560"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:10.857412" elapsed="0.009645">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:10.867537" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:10.868060" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:10.868529" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:26:10.849662" elapsed="0.019130">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:26:11.887828" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:26:11.887276" elapsed="0.000638">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:11.886341" elapsed="0.001824">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:26:11.888275" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:26:11.879788" elapsed="0.008585"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:11.878922" elapsed="0.009868">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:11.889316" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:11.889852" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:11.890328" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:26:11.869674" elapsed="0.020888">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:26:12.908004" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:26:12.907446" elapsed="0.000635">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:12.906485" elapsed="0.001825">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:26:12.908414" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:26:12.899880" elapsed="0.008628"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:12.899031" elapsed="0.009697">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:12.909236" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:12.909738" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:12.910237" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:26:12.891226" elapsed="0.019245">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:26:13.928629" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:26:13.928112" elapsed="0.000637">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:13.927078" elapsed="0.001927">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:26:13.929111" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:26:13.920538" elapsed="0.008668"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:13.919667" elapsed="0.009725">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:13.929933" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:13.930410" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:13.930928" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:26:13.911112" elapsed="0.020169">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:26:14.949113" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:26:14.948560" elapsed="0.000632">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:14.947625" elapsed="0.001803">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:26:14.949536" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:26:14.941030" elapsed="0.008604"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:14.940168" elapsed="0.009714">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:14.950381" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:14.950918" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:14.951388" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:26:14.932078" elapsed="0.019539">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:26:15.969533" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:26:15.969048" elapsed="0.000561">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:15.968104" elapsed="0.001793">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:26:15.970004" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:26:15.961577" elapsed="0.008523"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:15.960622" elapsed="0.009666">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:15.970860" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:15.971338" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:15.971872" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:26:15.952340" elapsed="0.019766">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:26:16.989853" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:26:16.989301" elapsed="0.000640">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:16.988294" elapsed="0.001883">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:26:16.990397" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:26:16.981639" elapsed="0.008857"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:16.980737" elapsed="0.009980">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:16.991222" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:16.991719" elapsed="0.000074"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:16.992216" elapsed="0.000046"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:26:16.972806" elapsed="0.019636">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:26:18.010332" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:26:18.009810" elapsed="0.000601">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:18.008879" elapsed="0.001770">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:26:18.010808" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:26:18.002345" elapsed="0.008566"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:18.001488" elapsed="0.009613">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:18.011587" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:18.012152" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:18.012623" elapsed="0.000046"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:26:17.993185" elapsed="0.019721">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:26:19.030205" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:26:19.029668" elapsed="0.000612">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:19.028788" elapsed="0.001716">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:26:19.030605" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:26:19.022192" elapsed="0.008538"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:19.021341" elapsed="0.009603">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:19.031420" elapsed="0.000045"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:19.031941" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:19.032542" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:26:19.013507" elapsed="0.019321">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:26:20.058444" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:26:20.057914" elapsed="0.000619">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:20.056940" elapsed="0.001909">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:26:20.058970" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:26:20.048635" elapsed="0.010437"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:20.047380" elapsed="0.011883">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:20.059829" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:20.060325" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:20.060840" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:26:20.034043" elapsed="0.027032">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:26:21.079027" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:26:21.078467" elapsed="0.000645">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:21.077522" elapsed="0.001836">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:26:21.079469" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:26:21.071040" elapsed="0.008526"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:21.070150" elapsed="0.009699">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.080360" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.080915" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.081391" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:26:21.062008" elapsed="0.019617">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:26:21.081908" level="FAIL">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>90s</arg>
<arg>1s</arg>
<arg>Check Ovsdb Shards Status</arg>
<arg>${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-10-06T01:24:50.276965" elapsed="90.805200">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<doc>Check Shard Status after some cluster event.</doc>
<status status="FAIL" start="2026-10-06T01:24:50.276572" elapsed="90.805946">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<doc>Create original cluster list and check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:24:49.918305" elapsed="91.164670">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</test>
<test id="s1-s1-s2-t25" name="Check Entity Owner Status After Recover" line="126">
<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-10-06T01:26:21.086991" elapsed="0.000482"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:26:21.086328" elapsed="0.001260"/>
</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-10-06T01:26:21.089852" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:21.089530" elapsed="0.000432"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.089481" elapsed="0.000531"/>
</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-10-06T01:26:21.094530" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:21.094339" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.094298" elapsed="0.000373"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:26:21.096905" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:26:21.096092" elapsed="0.000872"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:21.097979" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:21.097305" elapsed="0.000728"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:26:21.098124" elapsed="0.000060"/>
</return>
<msg time="2026-10-06T01:26:21.098406" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:26:21.095197" elapsed="0.003260"/>
</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-10-06T01:26:21.104413" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:21.104202" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.104160" elapsed="0.000399"/>
</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-10-06T01:26:21.106777" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:21.106610" elapsed="0.000228"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.106587" elapsed="0.000281"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:21.107396" level="INFO">${karaf_connection_index} = 222</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-10-06T01:26:21.107072" elapsed="0.000359"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:21.107957" 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-10-06T01:26:21.107657" elapsed="0.000335"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:21.146329" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:21.108829" elapsed="0.037783"/>
</kw>
<msg time="2026-10-06T01:26:21.146923" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:21.146985" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.108207" elapsed="0.038828"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:21.229189" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:21.147974" elapsed="0.081486"/>
</kw>
<msg time="2026-10-06T01:26:21.229670" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:21.229748" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.147274" elapsed="0.082528"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.230217" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:21.229915" elapsed="0.000458"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.229879" elapsed="0.000524"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:21.231083" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:21.230590" elapsed="0.000578"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.231431" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:21.231231" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.231214" elapsed="0.000312"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:21.231564" elapsed="0.000042"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:21.234406" elapsed="0.000566"/>
</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-10-06T01:26:21.236319" elapsed="0.000570"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:21.238237" elapsed="0.000323"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:21.232529" elapsed="0.006102"/>
</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-10-06T01:26:21.231963" elapsed="0.006835"/>
</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="PASS" start="2026-10-06T01:26:21.106247" elapsed="0.132635"/>
</kw>
<msg time="2026-10-06T01:26:21.238971" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:21.239012" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.104952" elapsed="0.134097"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:21.239211" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:26:21.239123" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.239105" elapsed="0.000185"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:26:21.239634" elapsed="0.000024"/>
</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-10-06T01:26:21.240106" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:21.240174" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:26:21.103256" elapsed="0.137008"/>
</kw>
<msg time="2026-10-06T01:26:21.240355" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:21.240395" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.099276" elapsed="0.141157"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.240780" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:21.240507" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.240489" elapsed="0.000368"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:21.098960" elapsed="0.141920"/>
</iter>
<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-10-06T01:26:21.243458" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:21.243372" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.243354" elapsed="0.000166"/>
</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-10-06T01:26:21.244621" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:21.244537" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.244520" elapsed="0.000190"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:21.245136" level="INFO">${karaf_connection_index} = 224</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-10-06T01:26:21.244891" elapsed="0.000270"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:21.245563" 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-10-06T01:26:21.245326" elapsed="0.000263"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:21.281458" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:21.246207" elapsed="0.035454"/>
</kw>
<msg time="2026-10-06T01:26:21.281878" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:21.281921" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.245786" elapsed="0.036170"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:21.356464" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:21.282554" elapsed="0.074100"/>
</kw>
<msg time="2026-10-06T01:26:21.356887" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:21.356930" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.282125" elapsed="0.074841"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.357259" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:21.357044" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.357022" elapsed="0.000335"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:21.357945" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:21.357540" elapsed="0.000492"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.358296" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:21.358096" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.358078" elapsed="0.000312"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:21.358422" elapsed="0.000030"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:21.361232" elapsed="0.000536"/>
</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-10-06T01:26:21.363033" elapsed="0.000469"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:21.364917" elapsed="0.000317"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:21.359466" elapsed="0.005837"/>
</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-10-06T01:26:21.358761" elapsed="0.006662"/>
</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="PASS" start="2026-10-06T01:26:21.244276" elapsed="0.121226"/>
</kw>
<msg time="2026-10-06T01:26:21.365584" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:21.365623" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.243666" elapsed="0.121993"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:21.365925" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:26:21.365835" elapsed="0.000147"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.365816" elapsed="0.000188"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.366322" elapsed="0.000024"/>
</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-10-06T01:26:21.366621" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:21.366707" 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="PASS" start="2026-10-06T01:26:21.243069" elapsed="0.123794"/>
</kw>
<msg time="2026-10-06T01:26:21.366952" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:21.366991" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.241158" elapsed="0.125869"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.367317" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:21.367097" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.367080" elapsed="0.000309"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:21.241015" elapsed="0.126395"/>
</iter>
<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-10-06T01:26:21.369960" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:21.369875" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.369858" elapsed="0.000165"/>
</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-10-06T01:26:21.371159" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:21.371070" elapsed="0.000132"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.371052" elapsed="0.000171"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:21.371600" level="INFO">${karaf_connection_index} = 226</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-10-06T01:26:21.371367" elapsed="0.000259"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:21.372016" 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-10-06T01:26:21.371834" elapsed="0.000207"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:21.406130" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:21.372611" elapsed="0.033755"/>
</kw>
<msg time="2026-10-06T01:26:21.406595" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:21.406640" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.372196" elapsed="0.034527"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:21.501188" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:21.407505" elapsed="0.093876"/>
</kw>
<msg time="2026-10-06T01:26:21.501544" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:21.501586" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.406982" elapsed="0.094640"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.501993" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:21.501741" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.501712" elapsed="0.000384"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:21.502631" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:21.502284" elapsed="0.000452"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.503012" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:21.502813" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.502795" elapsed="0.000312"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:21.503142" elapsed="0.000041"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:21.505792" elapsed="0.000495"/>
</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-10-06T01:26:21.507559" elapsed="0.000828"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:21.509593" elapsed="0.000350"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:21.504035" elapsed="0.005977"/>
</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-10-06T01:26:21.503475" elapsed="0.006658"/>
</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="PASS" start="2026-10-06T01:26:21.370805" elapsed="0.139406"/>
</kw>
<msg time="2026-10-06T01:26:21.510296" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:21.510336" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.370170" elapsed="0.140203"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:21.510532" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:26:21.510445" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.510427" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.511016" elapsed="0.000025"/>
</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-10-06T01:26:21.511326" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:21.511394" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:26:21.369552" elapsed="0.141928"/>
</kw>
<msg time="2026-10-06T01:26:21.511568" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:21.511607" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.367665" elapsed="0.143977"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.511998" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:21.511769" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.511734" elapsed="0.000338"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:21.367526" elapsed="0.144567"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:26:21.098576" elapsed="0.413550"/>
</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-10-06T01:26:21.093593" elapsed="0.418594"/>
</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-10-06T01:26:21.088931" elapsed="0.423310"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.087970" elapsed="0.424317"/>
</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-10-06T01:26:21.085143" elapsed="0.427197"/>
</kw>
<kw name="Get Ovsdb Entity Owner Status For One Device" owner="ClusterOvsdb">
<msg time="2026-10-06T01:26:21.516559" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<var>${new_owner}</var>
<var>${new_candidate_list}</var>
<arg>ovsdb://uuid/${ovsdb_uuid}</arg>
<arg>1</arg>
<doc>Check Entity Owner Status and identify owner and successors for an ovs device ${device}. Request is sent to controller ${controller_index}.</doc>
<status status="FAIL" start="2026-10-06T01:26:21.515024" elapsed="0.001573">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_owner}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.516862" elapsed="0.000022"/>
</kw>
<doc>Check Entity Owner Status and identify owner and candidate.</doc>
<status status="FAIL" start="2026-10-06T01:26:21.083940" elapsed="0.433087">Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s1-s2-t26" name="Create Bridge Manually and Verify After Recover" line="133">
<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-10-06T01:26:21.518552" elapsed="0.000249"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:26:21.518301" elapsed="0.000551"/>
</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-10-06T01:26:21.519851" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:21.519736" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.519713" elapsed="0.000201"/>
</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-10-06T01:26:21.521884" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:21.521795" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.521744" elapsed="0.000238"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:26:21.522917" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:26:21.522553" elapsed="0.000391"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:21.523366" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:21.523096" elapsed="0.000294"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:26:21.523431" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:26:21.523557" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:26:21.522193" elapsed="0.001387"/>
</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-10-06T01:26:21.526460" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:21.526365" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.526347" elapsed="0.000184"/>
</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-10-06T01:26:21.527740" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:21.527623" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.527606" elapsed="0.000219"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:21.528229" level="INFO">${karaf_connection_index} = 222</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-10-06T01:26:21.527975" elapsed="0.000280"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:21.528650" 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-10-06T01:26:21.528420" elapsed="0.000274"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:21.566711" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:21.529298" elapsed="0.037635"/>
</kw>
<msg time="2026-10-06T01:26:21.567099" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:21.567141" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.528880" elapsed="0.038296"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:21.652577" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:21.567818" elapsed="0.085061"/>
</kw>
<msg time="2026-10-06T01:26:21.653086" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:21.653130" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.567345" elapsed="0.085821"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.653544" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:21.653268" elapsed="0.000353"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.653237" elapsed="0.000411"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:21.654317" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:21.653896" elapsed="0.000514"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.654704" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:21.654474" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.654457" elapsed="0.000378"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:21.654876" elapsed="0.000041"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:21.657619" elapsed="0.000544"/>
</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-10-06T01:26:21.659586" elapsed="0.000554"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:21.661423" elapsed="0.000568"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:21.655833" elapsed="0.006231"/>
</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-10-06T01:26:21.655233" elapsed="0.006954"/>
</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="PASS" start="2026-10-06T01:26:21.527363" elapsed="0.134903"/>
</kw>
<msg time="2026-10-06T01:26:21.662354" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:21.662395" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.526727" elapsed="0.135704"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:21.662593" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:26:21.662505" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.662487" elapsed="0.000185"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:26:21.663063" elapsed="0.000025"/>
</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-10-06T01:26:21.663374" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:21.663439" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:26:21.526063" elapsed="0.137466"/>
</kw>
<msg time="2026-10-06T01:26:21.663618" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:21.663658" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.524021" elapsed="0.139790"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.664120" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:21.663895" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.663877" elapsed="0.000316"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:21.523878" elapsed="0.140338"/>
</iter>
<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-10-06T01:26:21.666969" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:21.666882" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.666864" elapsed="0.000169"/>
</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-10-06T01:26:21.668178" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:21.668092" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.668074" elapsed="0.000168"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:21.668624" level="INFO">${karaf_connection_index} = 224</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-10-06T01:26:21.668384" elapsed="0.000265"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:21.669044" 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-10-06T01:26:21.668855" elapsed="0.000217"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:21.703835" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:21.669645" elapsed="0.034384"/>
</kw>
<msg time="2026-10-06T01:26:21.704194" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:21.704235" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.669225" elapsed="0.035045"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:21.792706" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:21.704924" elapsed="0.088026"/>
</kw>
<msg time="2026-10-06T01:26:21.793113" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:21.793155" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.704438" elapsed="0.088753"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.793473" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:21.793263" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.793244" elapsed="0.000325"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:21.794147" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:21.793795" elapsed="0.000441"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.794502" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:21.794300" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.794283" elapsed="0.000314"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:21.794630" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:21.797233" elapsed="0.000526"/>
</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-10-06T01:26:21.799029" elapsed="0.000461"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:21.800971" elapsed="0.000309"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:21.795447" elapsed="0.005904"/>
</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-10-06T01:26:21.794947" elapsed="0.006531"/>
</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="PASS" start="2026-10-06T01:26:21.667818" elapsed="0.133739"/>
</kw>
<msg time="2026-10-06T01:26:21.801640" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:21.801701" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.667181" elapsed="0.134582"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:21.801928" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:26:21.801840" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.801822" elapsed="0.000187"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.802331" elapsed="0.000024"/>
</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-10-06T01:26:21.802636" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:21.802821" elapsed="0.000018"/>
</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="PASS" start="2026-10-06T01:26:21.666526" elapsed="0.136387"/>
</kw>
<msg time="2026-10-06T01:26:21.803000" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:21.803041" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.664490" elapsed="0.138587"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.803372" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:21.803147" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.803130" elapsed="0.000315"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:21.664347" elapsed="0.139120"/>
</iter>
<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-10-06T01:26:21.806179" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:21.806093" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.806075" elapsed="0.000202"/>
</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-10-06T01:26:21.807400" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:21.807315" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.807297" elapsed="0.000167"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:21.807924" level="INFO">${karaf_connection_index} = 226</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-10-06T01:26:21.807607" elapsed="0.000343"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:21.808292" 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-10-06T01:26:21.808114" elapsed="0.000203"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:21.843822" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:21.808982" elapsed="0.035102"/>
</kw>
<msg time="2026-10-06T01:26:21.844307" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:21.844349" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.808473" elapsed="0.035914"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:21.925263" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:21.845242" elapsed="0.080251"/>
</kw>
<msg time="2026-10-06T01:26:21.925656" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:21.925726" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.844627" elapsed="0.081154"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.926134" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:21.925881" elapsed="0.000329"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.925851" elapsed="0.000391"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:21.926831" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:21.926433" elapsed="0.000496"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.927196" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:21.926993" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.926976" elapsed="0.000330"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:21.927350" elapsed="0.000043"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:21.930119" elapsed="0.000508"/>
</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-10-06T01:26:21.931943" elapsed="0.000494"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:21.933858" elapsed="0.000318"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:21.928310" elapsed="0.005937"/>
</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-10-06T01:26:21.927732" elapsed="0.006633"/>
</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="PASS" start="2026-10-06T01:26:21.807050" elapsed="0.127396"/>
</kw>
<msg time="2026-10-06T01:26:21.934538" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:21.934579" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.806430" elapsed="0.128185"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:21.934879" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:26:21.934784" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.934670" elapsed="0.000357"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.935374" elapsed="0.000024"/>
</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-10-06T01:26:21.935716" elapsed="0.000027"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:21.935808" 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="PASS" start="2026-10-06T01:26:21.805789" elapsed="0.130119"/>
</kw>
<msg time="2026-10-06T01:26:21.936000" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:21.936042" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.803744" elapsed="0.132335"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.936375" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:21.936152" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.936135" elapsed="0.000312"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:21.803579" elapsed="0.132889"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:26:21.523639" elapsed="0.412865"/>
</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-10-06T01:26:21.521451" elapsed="0.415116"/>
</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-10-06T01:26:21.519386" elapsed="0.417236"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:21.518998" elapsed="0.417670"/>
</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-10-06T01:26:21.517938" elapsed="0.418923"/>
</kw>
<kw name="Create Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:21.940589" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:21.940355" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:21.940337" elapsed="0.000328"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:21.941024" 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-10-06T01:26:21.941119" 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-10-06T01:26:21.940887" elapsed="0.000257"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:21.941615" level="INFO">Attempting to execute command "sudo ovs-vsctl add-br br-s1" on remote system "10.30.170.234" 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-10-06T01:26:21.941331" elapsed="0.000327"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:21.942189" level="INFO">${conn_id} = 325</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-10-06T01:26:21.941879" elapsed="0.000334"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:26:21.943074" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:26:21.943144" 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-10-06T01:26:21.942788" elapsed="0.000378"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:21.943313" elapsed="0.000281"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:26:21.944383" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:26:22.555599" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:26:22 UTC 2026

  System load:  0.09               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:24:37 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:26:21.944151" elapsed="0.611751"/>
</kw>
<msg time="2026-10-06T01:26:22.555990" 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-10-06T01:26:21.943785" elapsed="0.612300"/>
</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-10-06T01:26:21.942406" elapsed="0.613795"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:26:22.556798" level="INFO">Executing command 'sudo ovs-vsctl add-br br-s1'.</msg>
<msg time="2026-10-06T01:26:22.610139" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:26:22.610386" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:26:22.610475" level="INFO">${stderr} = </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-10-06T01:26:22.556502" elapsed="0.054021"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:22.610975" elapsed="0.000430"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.612579" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.611971" elapsed="0.000697"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:22.613139" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:22.612888" elapsed="0.000374"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.612836" elapsed="0.000491"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:26:22.613631" elapsed="0.000087"/>
</return>
<status status="PASS" start="2026-10-06T01:26:22.613444" elapsed="0.000368"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.613411" elapsed="0.000452"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:22.613932" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:22.615568" elapsed="0.000715"/>
</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-10-06T01:26:22.616735" elapsed="0.000351"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:22.617406" elapsed="0.000197"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:22.614599" elapsed="0.003141"/>
</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-10-06T01:26:21.939929" elapsed="0.677990"/>
</kw>
<msg time="2026-10-06T01:26:22.618023" 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-10-06T01:26:21.939357" elapsed="0.678766"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:26:21.938942" elapsed="0.679337"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.619443" level="INFO">${dictionary_operational} = {'br-s1': '5'}</msg>
<var>${dictionary_operational}</var>
<arg>br-s1=5</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:26:22.618763" elapsed="0.000735"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.620599" level="INFO">${dictionary_config} = {'br-s1': '0'}</msg>
<var>${dictionary_config}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:26:22.619977" elapsed="0.000677"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.631053" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:26:22.630214" elapsed="0.000899"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.632127" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:22.631455" elapsed="0.000727"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:26:22.632273" elapsed="0.000059"/>
</return>
<msg time="2026-10-06T01:26:22.632553" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:26:22.629318" elapsed="0.003286"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.638583" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:26:22.637978" elapsed="0.000660"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:26:22.638865" elapsed="0.000065"/>
</return>
<msg time="2026-10-06T01:26:22.639155" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:26:22.637194" elapsed="0.002014"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.641199" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.640779" elapsed="0.000483"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.641906" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.641531" elapsed="0.000432"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:22.655263" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:26:22.655475" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '144'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:26:22.655637" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:26:22.642418" elapsed="0.013253"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.642067" elapsed="0.013720"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.656055" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:22.655825" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.642034" elapsed="0.014132"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.658048" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.657533" elapsed="0.000579"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.657198" elapsed="0.000959"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.657172" elapsed="0.001017"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.659012" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.658591" elapsed="0.000478"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.658262" elapsed="0.000850"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.658240" elapsed="0.000903"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.659952" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:22.659396" elapsed="0.000592"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.660365" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:22.660078" elapsed="0.000359"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.661097" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:22.660711" elapsed="0.000419"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.660468" elapsed="0.000707"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.660055" elapsed="0.001148"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.661940" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:22.661436" elapsed="0.000544"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.662347" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:22.662068" elapsed="0.000350"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.663072" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:22.662665" elapsed="0.000442"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.662449" elapsed="0.000703"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.662045" elapsed="0.001135"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:22.663377" elapsed="0.000480"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:26:22.664435" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:22.664086" elapsed="0.000384"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:26:22.664732" elapsed="0.000335"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:26:22.656656" elapsed="0.008568"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:26:22.665437" elapsed="0.000044"/>
</return>
<status status="PASS" start="2026-10-06T01:26:22.665315" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.665291" elapsed="0.000268"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.665812" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:26:22.665907" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:26:22.666214" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:26:22.639865" elapsed="0.026387"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:26:22.666316" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:26:22.666486" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:26:22.636215" elapsed="0.030306"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.668081" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:26:22.667588" elapsed="0.000581"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:26:22.667361" elapsed="0.000859"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:26:22.667203" elapsed="0.001057"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:26:22.666876" elapsed="0.001452"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:22.633045" elapsed="0.035326"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.672012" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:22.671594" elapsed="0.000454"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:26:22.672105" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:26:22.672274" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:26:22.671151" elapsed="0.001155"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.673950" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.673599" elapsed="0.000412"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.674571" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.674271" elapsed="0.000357"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:22.690366" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01q8j2dkwra6wr3cwxwejtlypa1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:26:22.690509" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:26:22.690627" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:26:22.675070" elapsed="0.015591"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.674736" elapsed="0.016037"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.691025" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:22.690810" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.674711" elapsed="0.016422"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.692926" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.692435" elapsed="0.000555"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.692102" elapsed="0.000932"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.692069" elapsed="0.000996"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.693875" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.693461" elapsed="0.000528"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.693135" elapsed="0.000900"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.693114" elapsed="0.000952"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.694840" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:22.694309" elapsed="0.000567"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.695248" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:22.694966" elapsed="0.000356"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.695990" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:22.695568" elapsed="0.000458"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.695353" elapsed="0.000719"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.694943" elapsed="0.001157"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.696868" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:22.696332" elapsed="0.000573"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.697275" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:22.696994" elapsed="0.000352"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.698009" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:22.697589" elapsed="0.000455"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.697377" elapsed="0.000714"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.696972" elapsed="0.001147"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:22.698339" elapsed="0.000487"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:26:22.699355" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:22.699050" elapsed="0.000339"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:26:22.699596" elapsed="0.000336"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:26:22.691578" elapsed="0.008432"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:26:22.700210" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:26:22.700097" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.700075" elapsed="0.000242"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.700508" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:26:22.700597" elapsed="0.000019"/>
</return>
<msg time="2026-10-06T01:26:22.700934" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:26:22.672737" elapsed="0.028232"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:26:22.701034" elapsed="0.000034"/>
</return>
<msg time="2026-10-06T01:26:22.701200" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:26:22.670545" elapsed="0.030687"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.702718" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:26:22.702275" elapsed="0.000549"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:26:22.702057" elapsed="0.000817"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:26:22.701913" elapsed="0.000999"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:26:22.701509" elapsed="0.001469"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:22.668483" elapsed="0.034539"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.706734" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:22.706340" elapsed="0.000446"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:26:22.706844" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:26:22.707069" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:26:22.705895" elapsed="0.001253"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.708811" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.708461" elapsed="0.000413"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.709637" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.709132" elapsed="0.000584"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:22.723983" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01iz04a3k2d6itg7w98bvdcezy1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:26:22.724125" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:26:22.724242" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:26:22.710135" elapsed="0.014140"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.709821" elapsed="0.014507"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.724570" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:22.724362" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.709796" elapsed="0.014905"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.726464" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.726014" elapsed="0.000510"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.725644" elapsed="0.000924"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.725620" elapsed="0.000980"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.727406" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.727034" elapsed="0.000431"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.726670" elapsed="0.000838"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.726649" elapsed="0.000890"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.728330" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:22.727838" elapsed="0.000528"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.728797" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:22.728456" elapsed="0.000430"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.729521" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:22.729153" elapsed="0.000402"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.728927" elapsed="0.000674"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.728433" elapsed="0.001197"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.730392" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:22.729921" elapsed="0.000506"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.730833" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:22.730516" elapsed="0.000391"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.731520" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:22.731159" elapsed="0.000394"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.730938" elapsed="0.000660"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.730493" elapsed="0.001133"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:22.731855" elapsed="0.000407"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:26:22.732817" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:22.732478" elapsed="0.000374"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:26:22.733057" elapsed="0.000287"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:26:22.725174" elapsed="0.008246"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:26:22.733668" elapsed="0.000057"/>
</return>
<status status="PASS" start="2026-10-06T01:26:22.733553" elapsed="0.000237"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.733529" elapsed="0.000293"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.734015" elapsed="0.000027"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:26:22.734103" elapsed="0.000019"/>
</return>
<msg time="2026-10-06T01:26:22.734398" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:26:22.707570" elapsed="0.026863"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:26:22.734496" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:26:22.734665" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:26:22.705281" elapsed="0.029438"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.736146" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:26:22.735711" elapsed="0.000518"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:26:22.735472" elapsed="0.000806"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:26:22.735330" elapsed="0.000986"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:26:22.735018" elapsed="0.001364"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:22.703133" elapsed="0.033291"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:26:22.632777" elapsed="0.103683"/>
</for>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:26:22.628100" elapsed="0.108423"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:26:22.621138" elapsed="0.115452"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.743018" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:26:22.742526" elapsed="0.000527"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.743634" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:22.743260" elapsed="0.000408"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:26:22.743760" elapsed="0.000039"/>
</return>
<msg time="2026-10-06T01:26:22.743940" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:26:22.742034" elapsed="0.001937"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.747568" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:26:22.747197" elapsed="0.000406"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:26:22.747660" elapsed="0.000058"/>
</return>
<msg time="2026-10-06T01:26:22.747867" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:26:22.746732" elapsed="0.001168"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.749231" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.749013" elapsed="0.000259"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.749672" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.749457" elapsed="0.000271"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:22.759049" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:26:22.759244" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '5397'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;10a0dcbe-723b-49b8-b6fd-b99bbfca8572&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;b1362dd6-c7c2-4489-8db1-44d4b86ddf57&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0307a629-6aa6-44f3-9f82-29802883a66c&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;be:dc:a0:10:b8:49&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;10&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:be:dc:a0:10:b8:49&lt;/datapath-id&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:26:22.759400" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:26:22.750030" elapsed="0.009394"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.749801" elapsed="0.009661"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.759636" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:22.759486" elapsed="0.000245"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.749783" elapsed="0.009996"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.761133" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;10a0dcbe-723b-49b8-b6fd-b99bbfca8572&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;b1362dd6-c7c2-4489-8db1-44d4b86ddf57&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0307a629-6aa6-44f3-9f82-29802883a66c&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;be:dc:a0:10:b8:49&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;10&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:be:dc:a0:10:b8:49&lt;/datapath-id&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.760729" elapsed="0.000553"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.760448" elapsed="0.000867"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.760430" elapsed="0.000907"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.761931" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.761627" elapsed="0.000345"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.761389" elapsed="0.000614"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.761373" elapsed="0.000652"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.762537" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:22.762195" elapsed="0.000367"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.762866" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:22.762626" elapsed="0.000305"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.764818" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:22.763149" elapsed="0.001695"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.762959" elapsed="0.001919"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.762610" elapsed="0.002288"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.765412" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:22.765069" elapsed="0.000368"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.765718" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:22.765501" elapsed="0.000283"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.766226" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:22.765962" elapsed="0.000289"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.765806" elapsed="0.000477"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.765484" elapsed="0.000819"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:22.766442" elapsed="0.000326"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:26:22.767143" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:22.766925" elapsed="0.000242"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:26:22.767314" elapsed="0.000207"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:26:22.760107" elapsed="0.007470"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:26:22.767736" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-10-06T01:26:22.767637" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.767621" elapsed="0.000210"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.767969" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:26:22.768031" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:26:22.768306" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1&lt;/node-id...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:26:22.748372" elapsed="0.019962"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:26:22.768379" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:26:22.768501" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1&lt;/node-id...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:26:22.746142" elapsed="0.022385"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.769554" level="INFO">Item found from container 5 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:26:22.769249" elapsed="0.000388"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:26:22.769093" elapsed="0.000579"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:26:22.768990" elapsed="0.000726"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:26:22.768758" elapsed="0.001019"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:22.744183" elapsed="0.025660"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.772363" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:22.772095" elapsed="0.000293"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:26:22.772430" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:26:22.772552" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:26:22.771767" elapsed="0.000807"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.773768" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.773518" elapsed="0.000294"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.774216" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.774000" elapsed="0.000256"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:22.786543" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01q8j2dkwra6wr3cwxwejtlypa1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:26:22.786739" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2408'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"10a0dcbe-723b-49b8-b6fd-b99bbfca8572","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"b1362dd6-c7c2-4489-8db1-44d4b86ddf57","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"0307a629-6aa6-44f3-9f82-29802883a66c","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"be:dc:a0:10:b8:49","ovsdb:ofport":65534,"ovsdb:ifindex":10}],"ovsdb:datapath-id":"00:00:be:dc:a0:10:b8:49"},{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":59306,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1']"}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:26:22.786862" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:26:22.774540" elapsed="0.012346"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.774317" elapsed="0.012607"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.787100" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:22.786948" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.774300" elapsed="0.012878"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.788478" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"10a0dcbe-723b-49b8-b6fd-b99bbfca8572","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"b1362dd6-c7c2-4489-8db1-44d4b86ddf57","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"0307a629-6aa6-44f3-9f82-29802883a66c","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"be:dc:a0:10:b8:49","ovsdb:ofport":65534,"ovsdb:ifindex":10}],"ovsdb:datapath-id":"00:00:be:dc:a0:10:b8:49"},{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":59306,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1']"}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.788122" elapsed="0.000450"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.787880" elapsed="0.000725"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.787862" elapsed="0.000767"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.789216" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.788946" elapsed="0.000311"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.788695" elapsed="0.000594"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.788665" elapsed="0.000646"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.789855" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:22.789481" elapsed="0.000400"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.790298" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:22.790086" elapsed="0.000267"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.790919" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:22.790557" elapsed="0.000394"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.790377" elapsed="0.000618"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.789929" elapsed="0.001091"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.791623" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:22.791238" elapsed="0.000411"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.791967" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:22.791757" elapsed="0.000264"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.792462" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:22.792199" elapsed="0.000287"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.792043" elapsed="0.000476"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.791724" elapsed="0.000815"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:22.792710" elapsed="0.000317"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:26:22.793406" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:22.793185" elapsed="0.000245"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:26:22.793577" elapsed="0.000250"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:26:22.787500" elapsed="0.006385"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:26:22.794035" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:26:22.793949" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.793930" elapsed="0.000184"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.794254" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:26:22.794317" elapsed="0.000013"/>
</return>
<msg time="2026-10-06T01:26:22.794564" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:26:22.772904" elapsed="0.021686"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:26:22.794635" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:26:22.794787" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:26:22.771327" elapsed="0.023485"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.795833" level="INFO">Item found from container 5 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:26:22.795499" elapsed="0.000413"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:26:22.795342" elapsed="0.000606"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:26:22.795238" elapsed="0.000738"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:26:22.795016" elapsed="0.001008"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:22.769926" elapsed="0.026164"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.798619" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:22.798349" elapsed="0.000295"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:26:22.798701" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:26:22.798836" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:26:22.798029" elapsed="0.000830"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.800011" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.799788" elapsed="0.000266"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.800461" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.800239" elapsed="0.000262"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:22.812614" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01iz04a3k2d6itg7w98bvdcezy1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:26:22.812790" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2408'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"10a0dcbe-723b-49b8-b6fd-b99bbfca8572","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"b1362dd6-c7c2-4489-8db1-44d4b86ddf57","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"0307a629-6aa6-44f3-9f82-29802883a66c","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"be:dc:a0:10:b8:49","ovsdb:ofport":65534,"ovsdb:ifindex":10}],"ovsdb:datapath-id":"00:00:be:dc:a0:10:b8:49"},{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":59306,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1']"}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:26:22.812895" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:26:22.800814" elapsed="0.012105"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.800563" elapsed="0.012395"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.813134" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:22.812983" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.800546" elapsed="0.012667"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.814537" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"10a0dcbe-723b-49b8-b6fd-b99bbfca8572","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"b1362dd6-c7c2-4489-8db1-44d4b86ddf57","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"0307a629-6aa6-44f3-9f82-29802883a66c","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"be:dc:a0:10:b8:49","ovsdb:ofport":65534,"ovsdb:ifindex":10}],"ovsdb:datapath-id":"00:00:be:dc:a0:10:b8:49"},{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":59306,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1']"}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.814181" elapsed="0.000445"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.813909" elapsed="0.000750"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.813890" elapsed="0.000807"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.815422" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.815001" elapsed="0.000464"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.814762" elapsed="0.000734"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.814735" elapsed="0.000785"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.816125" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:22.815705" elapsed="0.000446"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.816420" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:22.816216" elapsed="0.000258"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.816951" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:22.816653" elapsed="0.000323"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.816497" elapsed="0.000512"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.816199" elapsed="0.000831"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.817539" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:22.817199" elapsed="0.000365"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.817859" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:22.817628" elapsed="0.000284"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.818351" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:22.818090" elapsed="0.000286"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:22.817935" elapsed="0.000473"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.817611" elapsed="0.000818"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:22.818567" elapsed="0.000323"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:26:22.819263" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:22.819044" elapsed="0.000242"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:26:22.819433" elapsed="0.000207"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:26:22.813537" elapsed="0.006184"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:26:22.819878" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:26:22.819796" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.819779" elapsed="0.000180"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.820101" elapsed="0.000019"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:26:22.820162" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:26:22.820420" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:26:22.799156" elapsed="0.021290"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:26:22.820491" elapsed="0.000024"/>
</return>
<msg time="2026-10-06T01:26:22.820612" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:26:22.797590" elapsed="0.023047"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.821666" level="INFO">Item found from container 5 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:26:22.821363" elapsed="0.000408"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:26:22.821206" elapsed="0.000601"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:26:22.821096" elapsed="0.000745"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:26:22.820871" elapsed="0.001018"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:22.796174" elapsed="0.025779"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:26:22.744036" elapsed="0.077944"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:26:22.741325" elapsed="0.080701"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:26:22.736910" elapsed="0.085163"/>
</kw>
<doc>Create bridge br-s1 using OVS command and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:26:21.938541" elapsed="0.883587"/>
</kw>
<doc>Create bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="PASS" start="2026-10-06T01:26:21.517251" elapsed="1.304988"/>
</test>
<test id="s1-s1-s2-t27" name="Add Port Manually and Verify After Recover" line="137">
<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-10-06T01:26:22.824022" elapsed="0.000222"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:26:22.823662" elapsed="0.000654"/>
</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-10-06T01:26:22.825450" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:22.825362" elapsed="0.000132"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.825345" elapsed="0.000170"/>
</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-10-06T01:26:22.827449" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:22.827365" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.827349" elapsed="0.000162"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.828431" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:26:22.828104" elapsed="0.000353"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.828930" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:22.828606" elapsed="0.000354"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:26:22.829001" elapsed="0.000032"/>
</return>
<msg time="2026-10-06T01:26:22.829146" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:26:22.827726" elapsed="0.001444"/>
</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-10-06T01:26:22.831918" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:22.831823" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.831805" elapsed="0.000179"/>
</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-10-06T01:26:22.833192" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:22.833108" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.833089" elapsed="0.000167"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:22.833645" level="INFO">${karaf_connection_index} = 222</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-10-06T01:26:22.833403" elapsed="0.000269"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:22.834066" 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-10-06T01:26:22.833879" elapsed="0.000212"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:22.868626" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:22.834671" elapsed="0.034335"/>
</kw>
<msg time="2026-10-06T01:26:22.869219" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:22.869262" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:22.834250" elapsed="0.035047"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:22.966654" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:22.870101" elapsed="0.096792"/>
</kw>
<msg time="2026-10-06T01:26:22.967150" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:22.967192" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:22.869525" elapsed="0.097704"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.967565" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:22.967322" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.967294" elapsed="0.000374"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:22.968259" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:22.967900" elapsed="0.000445"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.968607" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:22.968408" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.968390" elapsed="0.000345"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:22.968791" elapsed="0.000055"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:22.971532" elapsed="0.000558"/>
</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-10-06T01:26:22.973370" elapsed="0.000689"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:22.975270" elapsed="0.000323"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:22.969737" elapsed="0.005925"/>
</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-10-06T01:26:22.969166" elapsed="0.006734"/>
</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="PASS" start="2026-10-06T01:26:22.832842" elapsed="0.143142"/>
</kw>
<msg time="2026-10-06T01:26:22.976075" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:22.976117" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:22.832133" elapsed="0.144020"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:22.976312" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:26:22.976225" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.976208" elapsed="0.000184"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:26:22.976772" elapsed="0.000026"/>
</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-10-06T01:26:22.977093" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:22.977159" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:26:22.831491" elapsed="0.145759"/>
</kw>
<msg time="2026-10-06T01:26:22.977340" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:22.977380" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:22.829495" elapsed="0.147923"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:22.977857" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:22.977490" elapsed="0.000423"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.977472" elapsed="0.000464"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:22.829356" elapsed="0.148605"/>
</iter>
<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-10-06T01:26:22.980645" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:22.980557" elapsed="0.000147"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.980539" elapsed="0.000187"/>
</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-10-06T01:26:22.981934" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:22.981846" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:22.981828" elapsed="0.000170"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:22.982385" level="INFO">${karaf_connection_index} = 224</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-10-06T01:26:22.982142" elapsed="0.000269"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:22.982797" 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-10-06T01:26:22.982574" elapsed="0.000249"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:23.017392" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:22.983395" elapsed="0.034189"/>
</kw>
<msg time="2026-10-06T01:26:23.017802" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:23.017846" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:22.982978" elapsed="0.034903"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:23.092497" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:23.018482" elapsed="0.074384"/>
</kw>
<msg time="2026-10-06T01:26:23.093105" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:23.093149" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:23.018053" elapsed="0.075132"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.093640" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.093311" elapsed="0.000447"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.093268" elapsed="0.000522"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.094441" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.093985" elapsed="0.000548"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.094846" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.094596" elapsed="0.000331"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.094578" elapsed="0.000372"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:23.094987" elapsed="0.000044"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:23.097815" elapsed="0.000495"/>
</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-10-06T01:26:23.099607" elapsed="0.000564"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:23.101593" elapsed="0.000369"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:23.095962" elapsed="0.006076"/>
</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-10-06T01:26:23.095346" elapsed="0.006813"/>
</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="PASS" start="2026-10-06T01:26:22.981529" elapsed="0.120711"/>
</kw>
<msg time="2026-10-06T01:26:23.102333" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:23.102374" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:22.980908" elapsed="0.121503"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:23.102572" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-10-06T01:26:23.102484" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.102467" elapsed="0.000187"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.103113" elapsed="0.000086"/>
</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-10-06T01:26:23.103502" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:23.103570" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:26:22.980248" elapsed="0.123413"/>
</kw>
<msg time="2026-10-06T01:26:23.103806" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:23.103850" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:22.978236" elapsed="0.125650"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.104212" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.103963" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.103945" elapsed="0.000343"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:22.978095" elapsed="0.126214"/>
</iter>
<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-10-06T01:26:23.107137" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:23.107048" elapsed="0.000133"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.107029" elapsed="0.000174"/>
</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-10-06T01:26:23.108335" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:23.108249" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.108232" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:23.108831" level="INFO">${karaf_connection_index} = 226</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-10-06T01:26:23.108543" elapsed="0.000313"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:23.109303" 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-10-06T01:26:23.109020" elapsed="0.000312"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:23.143168" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:23.109969" elapsed="0.033390"/>
</kw>
<msg time="2026-10-06T01:26:23.143530" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:23.143572" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:23.109491" elapsed="0.034115"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:23.218111" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:23.144254" elapsed="0.074040"/>
</kw>
<msg time="2026-10-06T01:26:23.218451" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:23.218492" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:23.143825" elapsed="0.074703"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.218853" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.218598" elapsed="0.000331"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.218579" elapsed="0.000374"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.219482" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.219135" elapsed="0.000432"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.219876" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.219630" elapsed="0.000356"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.219613" elapsed="0.000398"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:23.220043" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:23.222574" elapsed="0.000545"/>
</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-10-06T01:26:23.224374" elapsed="0.000510"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:23.226298" elapsed="0.000314"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:23.220879" elapsed="0.005820"/>
</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-10-06T01:26:23.220320" elapsed="0.006528"/>
</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="PASS" start="2026-10-06T01:26:23.107984" elapsed="0.118942"/>
</kw>
<msg time="2026-10-06T01:26:23.227011" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:23.227051" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:23.107351" elapsed="0.119735"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:23.227243" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:26:23.227157" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.227140" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.227634" elapsed="0.000025"/>
</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-10-06T01:26:23.228163" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:23.228232" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:26:23.106694" elapsed="0.121626"/>
</kw>
<msg time="2026-10-06T01:26:23.228405" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:23.228445" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:23.104582" elapsed="0.123898"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.228813" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.228549" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.228533" elapsed="0.000356"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:23.104440" elapsed="0.124470"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:26:22.829217" elapsed="0.399721"/>
</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-10-06T01:26:22.827073" elapsed="0.401927"/>
</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-10-06T01:26:22.825096" elapsed="0.403961"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:22.824515" elapsed="0.404586"/>
</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-10-06T01:26:22.823313" elapsed="0.405842"/>
</kw>
<kw name="Add Sample Port To The Manual Bridge And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.232890" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.232623" elapsed="0.000323"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.232605" elapsed="0.000363"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:23.233312" 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-10-06T01:26:23.233408" 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-10-06T01:26:23.233160" elapsed="0.000273"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.233982" level="INFO">Attempting to execute command "sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan" on remote system "10.30.170.234" 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-10-06T01:26:23.233655" elapsed="0.000370"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:23.234504" level="INFO">${conn_id} = 330</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-10-06T01:26:23.234200" elapsed="0.000328"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.235399" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:26:23.235468" 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-10-06T01:26:23.235128" elapsed="0.000362"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:23.235635" elapsed="0.000322"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:26:23.236731" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:26:23.604074" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:26:22 UTC 2026

  System load:  0.09               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:26:22 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:26:23.236481" elapsed="0.367767"/>
</kw>
<msg time="2026-10-06T01:26:23.604338" 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-10-06T01:26:23.236118" elapsed="0.368313"/>
</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-10-06T01:26:23.234764" elapsed="0.369783"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:26:23.605151" level="INFO">Executing command 'sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan'.</msg>
<msg time="2026-10-06T01:26:23.658578" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:26:23.658791" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:26:23.658854" level="INFO">${stderr} = ovs-vsctl: Error detected while setting up 'vx1': vx1: vxlan type requires valid 'remote_ip' argument.  See ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/var/log/openvswitch"...</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-10-06T01:26:23.604886" elapsed="0.054000"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:23.659116" elapsed="0.000270"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.660401" level="INFO">ovs-vsctl: Error detected while setting up 'vx1': vx1: vxlan type requires valid 'remote_ip' argument.  See ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/var/log/openvswitch".</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.659804" elapsed="0.000695"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:23.661017" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:23.660668" elapsed="0.000457"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.660616" elapsed="0.000559"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:26:23.661467" elapsed="0.000056"/>
</return>
<status status="PASS" start="2026-10-06T01:26:23.661284" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.661254" elapsed="0.000384"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:23.661787" elapsed="0.000040"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:23.663466" elapsed="0.000743"/>
</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-10-06T01:26:23.664614" elapsed="0.000379"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:23.665308" elapsed="0.000199"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:23.662466" elapsed="0.003144"/>
</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-10-06T01:26:23.232202" elapsed="0.433614"/>
</kw>
<msg time="2026-10-06T01:26:23.666035" 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-10-06T01:26:23.231632" elapsed="0.434510"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:26:23.231213" elapsed="0.435086"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.667442" level="INFO">${dictionary_operational} = {'vx1': '2'}</msg>
<var>${dictionary_operational}</var>
<arg>vx1=2</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:26:23.666772" elapsed="0.000725"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.668590" level="INFO">${dictionary_config} = {'vx1': '0'}</msg>
<var>${dictionary_config}</var>
<arg>vx1=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:26:23.667971" elapsed="0.000673"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.678729" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:26:23.677965" elapsed="0.000844"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.679814" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:23.679151" elapsed="0.000719"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:26:23.679962" elapsed="0.000061"/>
</return>
<msg time="2026-10-06T01:26:23.680243" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:26:23.677126" elapsed="0.003168"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.685289" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:26:23.684893" elapsed="0.000433"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:26:23.685389" elapsed="0.000039"/>
</return>
<msg time="2026-10-06T01:26:23.685562" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:26:23.684398" elapsed="0.001197"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.687272" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.686960" elapsed="0.000370"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.687937" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.687588" elapsed="0.000404"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:23.699811" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:26:23.700023" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '144'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:26:23.700156" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:26:23.688450" elapsed="0.011739"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.688081" elapsed="0.012164"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.700497" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.700279" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.688057" elapsed="0.012554"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.702482" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.702019" elapsed="0.000527"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.701619" elapsed="0.000972"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.701594" elapsed="0.001029"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.703441" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.703069" elapsed="0.000429"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.702718" elapsed="0.000823"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.702674" elapsed="0.000898"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.704380" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:23.703862" elapsed="0.000628"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.704915" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.704584" elapsed="0.000406"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.705615" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:23.705243" elapsed="0.000405"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.705021" elapsed="0.000693"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.704560" elapsed="0.001199"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.706468" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:23.705997" elapsed="0.000507"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.706915" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.706593" elapsed="0.000397"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.707628" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:23.707238" elapsed="0.000424"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.707021" elapsed="0.000749"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.706570" elapsed="0.001244"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:23.708017" elapsed="0.000420"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:26:23.709071" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:23.708661" elapsed="0.000443"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:26:23.709317" elapsed="0.000340"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:26:23.701142" elapsed="0.008634"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:26:23.709983" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-10-06T01:26:23.709866" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.709843" elapsed="0.000248"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.710287" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:26:23.710376" elapsed="0.000019"/>
</return>
<msg time="2026-10-06T01:26:23.710673" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:26:23.686069" elapsed="0.024663"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:26:23.710812" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:26:23.710981" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:26:23.683774" elapsed="0.027242"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.712501" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:26:23.712051" elapsed="0.000535"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:26:23.711823" elapsed="0.000813"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:26:23.711623" elapsed="0.001073"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:26:23.711303" elapsed="0.001531"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:23.680783" elapsed="0.032095"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.716408" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:23.716035" elapsed="0.000406"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:26:23.716501" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:26:23.716668" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:26:23.715543" elapsed="0.001177"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.718406" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.718095" elapsed="0.000369"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.719066" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.718758" elapsed="0.000364"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:23.729868" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01q8j2dkwra6wr3cwxwejtlypa1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:26:23.730012" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:26:23.730131" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:26:23.719766" elapsed="0.010399"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.719401" elapsed="0.010819"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.730468" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.730253" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.719185" elapsed="0.011394"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.732412" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.731948" elapsed="0.000523"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.731576" elapsed="0.000940"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.731552" elapsed="0.000995"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.733363" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.732985" elapsed="0.000435"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.732617" elapsed="0.000847"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.732596" elapsed="0.000898"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.734251" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:23.733767" elapsed="0.000520"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.734658" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.734376" elapsed="0.000396"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.735396" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:23.735030" elapsed="0.000400"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.734804" elapsed="0.000671"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.734353" elapsed="0.001151"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.736249" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:23.735771" elapsed="0.000512"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.736649" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.736371" elapsed="0.000429"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.737411" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:23.737051" elapsed="0.000393"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.736832" elapsed="0.000656"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.736349" elapsed="0.001167"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:23.737730" elapsed="0.000453"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:26:23.738763" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:23.738406" elapsed="0.000395"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:26:23.739013" elapsed="0.000292"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:26:23.731101" elapsed="0.008280"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:26:23.739628" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:26:23.739513" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.739489" elapsed="0.000292"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.739981" elapsed="0.000027"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:26:23.740069" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:26:23.740365" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:26:23.717201" elapsed="0.023199"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:26:23.740464" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:26:23.740630" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:26:23.714976" elapsed="0.025686"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.742137" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:26:23.741699" elapsed="0.000521"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:26:23.741460" elapsed="0.000811"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:26:23.741318" elapsed="0.000990"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:26:23.741005" elapsed="0.001369"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:23.712988" elapsed="0.029428"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.746167" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:23.745792" elapsed="0.000409"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:26:23.746259" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:26:23.746428" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:26:23.745311" elapsed="0.001149"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.748086" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.747778" elapsed="0.000366"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.748725" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.748405" elapsed="0.000398"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:23.759987" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01iz04a3k2d6itg7w98bvdcezy1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:26:23.760125" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:26:23.760242" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:26:23.749199" elapsed="0.011076"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.748887" elapsed="0.011440"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.760569" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.760360" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.748864" elapsed="0.011834"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.762452" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.762004" elapsed="0.000508"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.761625" elapsed="0.000932"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.761601" elapsed="0.000987"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.763396" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.763027" elapsed="0.000425"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.762659" elapsed="0.000836"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.762637" elapsed="0.000888"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.764272" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:23.763797" elapsed="0.000510"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.764766" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.764444" elapsed="0.000398"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.765460" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:23.765094" elapsed="0.000399"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.764873" elapsed="0.000666"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.764419" elapsed="0.001148"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.766306" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:23.765836" elapsed="0.000505"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.766729" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.766430" elapsed="0.000387"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.767426" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:23.767066" elapsed="0.000394"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.766849" elapsed="0.000656"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.766407" elapsed="0.001126"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:23.767761" elapsed="0.000407"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:26:23.768710" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:23.768387" elapsed="0.000375"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:26:23.768977" elapsed="0.000290"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:26:23.761154" elapsed="0.008190"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:26:23.769539" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-10-06T01:26:23.769429" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.769406" elapsed="0.000241"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.769874" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:26:23.769963" elapsed="0.000021"/>
</return>
<msg time="2026-10-06T01:26:23.770263" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:26:23.746905" elapsed="0.023392"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:26:23.770360" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:26:23.770530" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:26:23.744718" elapsed="0.025844"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.772202" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:26:23.771773" elapsed="0.000512"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:26:23.771513" elapsed="0.000821"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:26:23.771369" elapsed="0.001003"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:26:23.770875" elapsed="0.001561"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:23.742526" elapsed="0.029953"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:26:23.680410" elapsed="0.092104"/>
</for>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:26:23.676004" elapsed="0.096572"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:26:23.669126" elapsed="0.103516"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.778822" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:26:23.778467" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.779306" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:23.779033" elapsed="0.000297"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:26:23.779371" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:26:23.779498" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:26:23.777961" elapsed="0.001559"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.782169" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:26:23.781900" elapsed="0.000293"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:26:23.782235" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:26:23.782356" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:26:23.781539" elapsed="0.000839"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.783525" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.783305" elapsed="0.000262"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.784001" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.783777" elapsed="0.000264"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:23.793601" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:26:23.793807" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '6049'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;10a0dcbe-723b-49b8-b6fd-b99bbfca8572&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;b1362dd6-c7c2-4489-8db1-44d4b86ddf57&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0307a629-6aa6-44f3-9f82-29802883a66c&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;be:dc:a0:10:b8:49&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;10&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vx1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;e94f2cb5-2c3d-4561-b8e8-7027d2a5bd39&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vx1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;88722a13-def9-4d73-a208-32589c233acd&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:be:dc:a0:10:b8:49&lt;/datapath-id&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:26:23.794022" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:26:23.784327" elapsed="0.009719"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.784103" elapsed="0.009982"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.794262" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.794110" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.784086" elapsed="0.010255"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.795650" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;10a0dcbe-723b-49b8-b6fd-b99bbfca8572&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;b1362dd6-c7c2-4489-8db1-44d4b86ddf57&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0307a629-6aa6-44f3-9f82-29802883a66c&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;be:dc:a0:10:b8:49&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;10&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vx1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;e94f2cb5-2c3d-4561-b8e8-7027d2a5bd39&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vx1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;88722a13-def9-4d73-a208-32589c233acd&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:be:dc:a0:10:b8:49&lt;/datapath-id&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.795273" elapsed="0.000548"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.795032" elapsed="0.000827"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.795014" elapsed="0.000870"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.796440" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.796172" elapsed="0.000309"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.795936" elapsed="0.000576"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.795920" elapsed="0.000614"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.798531" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:23.796721" elapsed="0.001836"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.798861" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.798624" elapsed="0.000291"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.799361" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:23.799094" elapsed="0.000292"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.798938" elapsed="0.000480"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.798606" elapsed="0.000833"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.799981" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:23.799606" elapsed="0.000400"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.800271" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.800070" elapsed="0.000252"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.800789" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:23.800498" elapsed="0.000316"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.800344" elapsed="0.000503"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.800053" elapsed="0.000814"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:23.801006" elapsed="0.000316"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:26:23.801728" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:23.801481" elapsed="0.000287"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:26:23.801920" elapsed="0.000215"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:26:23.794660" elapsed="0.007536"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:26:23.802337" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:26:23.802258" elapsed="0.000135"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.802242" elapsed="0.000174"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.802564" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:26:23.802631" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:26:23.802945" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1&lt;/node-id...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:26:23.782670" elapsed="0.020303"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:26:23.803019" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:26:23.803139" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1&lt;/node-id...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:26:23.781121" elapsed="0.022044"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.804203" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:26:23.803889" elapsed="0.000401"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:26:23.803709" elapsed="0.000616"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:26:23.803589" elapsed="0.000764"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:26:23.803365" elapsed="0.001035"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:23.779674" elapsed="0.024790"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.807024" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:23.806744" elapsed="0.000306"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:26:23.807090" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:26:23.807213" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:26:23.806388" elapsed="0.000848"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.808393" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.808171" elapsed="0.000264"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.808879" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.808622" elapsed="0.000297"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:23.821335" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01q8j2dkwra6wr3cwxwejtlypa1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:26:23.821484" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2679'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"10a0dcbe-723b-49b8-b6fd-b99bbfca8572","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"b1362dd6-c7c2-4489-8db1-44d4b86ddf57","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"0307a629-6aa6-44f3-9f82-29802883a66c","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"be:dc:a0:10:b8:49","ovsdb:ofport":65534,"ovsdb:ifindex":10},{"tp-id":"vx1","ovsdb:port-uuid":"e94f2cb5-2c3d-4561-b8e8-7027d2a5bd39","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"88722a13-def9-4d73-a208-32589c233acd","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:be:dc:a0:10:b8:49"},{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":59306,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1']"}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:26:23.821588" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:26:23.809209" elapsed="0.012403"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.808982" elapsed="0.012669"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.821874" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.821695" elapsed="0.000239"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.808964" elapsed="0.012990"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.823248" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"10a0dcbe-723b-49b8-b6fd-b99bbfca8572","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"b1362dd6-c7c2-4489-8db1-44d4b86ddf57","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"0307a629-6aa6-44f3-9f82-29802883a66c","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"be:dc:a0:10:b8:49","ovsdb:ofport":65534,"ovsdb:ifindex":10},{"tp-id":"vx1","ovsdb:port-uuid":"e94f2cb5-2c3d-4561-b8e8-7027d2a5bd39","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"88722a13-def9-4d73-a208-32589c233acd","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:be:dc:a0:10:b8:49"},{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":59306,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1']"}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.822876" elapsed="0.000463"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.822607" elapsed="0.000765"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.822590" elapsed="0.000805"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.824179" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.823697" elapsed="0.000524"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.823446" elapsed="0.000807"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.823431" elapsed="0.000845"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.824825" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:23.824448" elapsed="0.000402"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.825123" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.824915" elapsed="0.000261"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.825620" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:23.825355" elapsed="0.000289"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.825198" elapsed="0.000493"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.824898" elapsed="0.000815"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.826234" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:23.825895" elapsed="0.000364"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.826524" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.826323" elapsed="0.000252"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.827042" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:23.826779" elapsed="0.000287"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.826597" elapsed="0.000501"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.826306" elapsed="0.000813"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:23.827259" elapsed="0.000293"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:26:23.827988" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:23.827723" elapsed="0.000291"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:26:23.828161" elapsed="0.000206"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:26:23.822271" elapsed="0.006152"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:26:23.828564" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:26:23.828484" elapsed="0.000135"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.828467" elapsed="0.000174"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.828806" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:26:23.828870" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:26:23.829133" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:26:23.807526" elapsed="0.021633"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:26:23.829204" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:26:23.829325" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:26:23.805974" elapsed="0.023375"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.830368" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:26:23.830063" elapsed="0.000378"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:26:23.829906" elapsed="0.000571"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:26:23.829803" elapsed="0.000702"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:26:23.829552" elapsed="0.001001"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:23.804546" elapsed="0.026071"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.833197" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:23.832927" elapsed="0.000295"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:26:23.833264" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:26:23.833386" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:26:23.832574" elapsed="0.000834"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.834559" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.834338" elapsed="0.000263"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.835038" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.834817" elapsed="0.000261"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:23.847349" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01iz04a3k2d6itg7w98bvdcezy1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:26:23.847498" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2679'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"10a0dcbe-723b-49b8-b6fd-b99bbfca8572","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"b1362dd6-c7c2-4489-8db1-44d4b86ddf57","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"0307a629-6aa6-44f3-9f82-29802883a66c","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"be:dc:a0:10:b8:49","ovsdb:ofport":65534,"ovsdb:ifindex":10},{"tp-id":"vx1","ovsdb:port-uuid":"e94f2cb5-2c3d-4561-b8e8-7027d2a5bd39","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"88722a13-def9-4d73-a208-32589c233acd","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:be:dc:a0:10:b8:49"},{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":59306,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1']"}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:26:23.847602" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:26:23.835365" elapsed="0.012261"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.835140" elapsed="0.012525"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.847892" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.847718" elapsed="0.000234"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.835123" elapsed="0.012849"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.849423" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"10a0dcbe-723b-49b8-b6fd-b99bbfca8572","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"b1362dd6-c7c2-4489-8db1-44d4b86ddf57","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"0307a629-6aa6-44f3-9f82-29802883a66c","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"be:dc:a0:10:b8:49","ovsdb:ofport":65534,"ovsdb:ifindex":10},{"tp-id":"vx1","ovsdb:port-uuid":"e94f2cb5-2c3d-4561-b8e8-7027d2a5bd39","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"88722a13-def9-4d73-a208-32589c233acd","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:be:dc:a0:10:b8:49"},{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":59306,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1']"}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.848896" elapsed="0.000620"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.848629" elapsed="0.000920"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.848611" elapsed="0.000961"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.850179" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.849897" elapsed="0.000324"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.849625" elapsed="0.000629"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.849610" elapsed="0.000666"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.850822" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:23.850448" elapsed="0.000399"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.851115" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.850913" elapsed="0.000255"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.851612" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:23.851347" elapsed="0.000289"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.851191" elapsed="0.000478"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.850896" elapsed="0.000810"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.852227" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:23.851888" elapsed="0.000364"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.852517" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.852316" elapsed="0.000253"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.853045" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:23.852772" elapsed="0.000298"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:23.852591" elapsed="0.000511"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.852300" elapsed="0.000822"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:23.853264" elapsed="0.000295"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:26:23.853968" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:23.853732" elapsed="0.000260"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:26:23.854142" elapsed="0.000207"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:26:23.848289" elapsed="0.006117"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:26:23.854548" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:26:23.854467" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.854451" elapsed="0.000176"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.854793" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:26:23.854859" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:26:23.855122" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:26:23.833719" elapsed="0.021429"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:26:23.855194" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:26:23.855317" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uu...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:26:23.832159" elapsed="0.023183"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.856374" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:26:23.856070" elapsed="0.000378"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:26:23.855911" elapsed="0.000573"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:26:23.855798" elapsed="0.000713"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:26:23.855545" elapsed="0.001013"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:23.830715" elapsed="0.025911"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:26:23.779567" elapsed="0.077086"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:26:23.777227" elapsed="0.079490"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:26:23.772964" elapsed="0.083816"/>
</kw>
<doc>Add Port vx1 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:26:23.230835" elapsed="0.626002"/>
</kw>
<doc>Add port with OVS command and verify it gets applied from all instances.</doc>
<status status="PASS" start="2026-10-06T01:26:22.822655" elapsed="1.034293"/>
</test>
<test id="s1-s1-s2-t28" name="Delete the Bridge Manually and Verify After Recover" line="141">
<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-10-06T01:26:23.858667" elapsed="0.000291"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:26:23.858402" elapsed="0.000630"/>
</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-10-06T01:26:23.860160" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:23.860071" elapsed="0.000133"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.860053" elapsed="0.000172"/>
</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-10-06T01:26:23.862258" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:23.862173" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.862156" elapsed="0.000165"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.863233" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:26:23.862905" elapsed="0.000354"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.863694" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:23.863407" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:26:23.863796" elapsed="0.000029"/>
</return>
<msg time="2026-10-06T01:26:23.863930" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:26:23.862525" elapsed="0.001428"/>
</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-10-06T01:26:23.866408" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:23.866321" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.866304" elapsed="0.000168"/>
</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-10-06T01:26:23.867626" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:23.867543" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.867526" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:23.868131" level="INFO">${karaf_connection_index} = 222</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-10-06T01:26:23.867893" elapsed="0.000263"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:23.868504" 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-10-06T01:26:23.868320" elapsed="0.000207"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:23.905545" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:23.869148" elapsed="0.036696"/>
</kw>
<msg time="2026-10-06T01:26:23.906092" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:23.906135" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:23.868702" elapsed="0.037471"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:23.986627" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:23.907050" elapsed="0.079804"/>
</kw>
<msg time="2026-10-06T01:26:23.987104" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:23.987146" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:23.906419" elapsed="0.080764"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.987549" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.987282" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.987252" elapsed="0.000401"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:23.988271" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:23.987906" elapsed="0.000455"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.988624" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.988424" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.988407" elapsed="0.000346"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:23.988792" elapsed="0.000044"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:23.991490" elapsed="0.000561"/>
</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-10-06T01:26:23.993395" elapsed="0.000726"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:23.995351" elapsed="0.000319"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:23.989708" elapsed="0.006080"/>
</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-10-06T01:26:23.989151" elapsed="0.006765"/>
</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="PASS" start="2026-10-06T01:26:23.867284" elapsed="0.128716"/>
</kw>
<msg time="2026-10-06T01:26:23.996084" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:23.996123" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:23.866620" elapsed="0.129539"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:23.996313" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:26:23.996229" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.996212" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:26:23.996979" elapsed="0.000025"/>
</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-10-06T01:26:23.997295" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:23.997361" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:26:23.866029" elapsed="0.131418"/>
</kw>
<msg time="2026-10-06T01:26:23.997532" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:23.997572" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:23.864299" elapsed="0.133308"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:23.997928" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:23.997691" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:23.997660" elapsed="0.000340"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:23.864139" elapsed="0.133882"/>
</iter>
<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-10-06T01:26:24.000541" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:24.000457" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.000440" elapsed="0.000164"/>
</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-10-06T01:26:24.001783" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:24.001662" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.001644" elapsed="0.000202"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:24.002235" level="INFO">${karaf_connection_index} = 224</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-10-06T01:26:24.001997" elapsed="0.000263"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:24.002601" 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-10-06T01:26:24.002421" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:24.039700" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:24.003225" elapsed="0.036700"/>
</kw>
<msg time="2026-10-06T01:26:24.040085" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:24.040126" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:24.002808" elapsed="0.037353"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:24.124348" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:24.040787" elapsed="0.083865"/>
</kw>
<msg time="2026-10-06T01:26:24.124926" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:24.124975" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:24.040329" elapsed="0.084682"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:24.125448" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:24.125128" elapsed="0.000412"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.125092" elapsed="0.000477"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.126236" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:24.125794" elapsed="0.000543"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:24.126602" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:24.126401" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.126384" elapsed="0.000330"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:24.126765" elapsed="0.000043"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:24.129501" elapsed="0.000523"/>
</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-10-06T01:26:24.131295" elapsed="0.000509"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:24.133007" elapsed="0.000541"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:24.127664" elapsed="0.005954"/>
</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-10-06T01:26:24.127113" elapsed="0.006664"/>
</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="PASS" start="2026-10-06T01:26:24.001399" elapsed="0.132455"/>
</kw>
<msg time="2026-10-06T01:26:24.133940" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:24.133984" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:24.000778" elapsed="0.133242"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:24.134175" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:26:24.134090" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.134073" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:24.134658" elapsed="0.000047"/>
</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-10-06T01:26:24.135007" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:24.135072" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:26:24.000158" elapsed="0.134998"/>
</kw>
<msg time="2026-10-06T01:26:24.135244" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:24.135284" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:23.998287" elapsed="0.137033"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:24.135607" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:24.135389" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.135373" elapsed="0.000323"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:23.998146" elapsed="0.137574"/>
</iter>
<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-10-06T01:26:24.138521" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:24.138434" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.138417" elapsed="0.000167"/>
</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-10-06T01:26:24.139695" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:24.139591" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.139574" elapsed="0.000201"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:24.140156" level="INFO">${karaf_connection_index} = 226</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-10-06T01:26:24.139917" elapsed="0.000263"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:24.140583" 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-10-06T01:26:24.140351" elapsed="0.000264"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:24.174287" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:24.141318" elapsed="0.033312"/>
</kw>
<msg time="2026-10-06T01:26:24.174934" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:24.174984" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:24.140895" elapsed="0.034126"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:24.259874" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:24.175940" elapsed="0.084153"/>
</kw>
<msg time="2026-10-06T01:26:24.260259" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:24.260301" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:24.175311" elapsed="0.085027"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:24.260720" elapsed="0.000041"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:24.260439" elapsed="0.000377"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.260408" elapsed="0.000439"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.261391" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:24.261034" elapsed="0.000448"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:24.261785" elapsed="0.000102"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:24.261544" elapsed="0.000399"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.261527" elapsed="0.000440"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:24.262006" elapsed="0.000046"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:24.264809" elapsed="0.000504"/>
</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-10-06T01:26:24.266614" elapsed="0.000551"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:24.268434" elapsed="0.000756"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:24.262971" elapsed="0.006290"/>
</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-10-06T01:26:24.262363" elapsed="0.007019"/>
</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="PASS" start="2026-10-06T01:26:24.139334" elapsed="0.130128"/>
</kw>
<msg time="2026-10-06T01:26:24.269548" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:24.269587" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:24.138758" elapsed="0.130865"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:24.269812" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:26:24.269711" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.269692" elapsed="0.000199"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:24.270237" elapsed="0.000024"/>
</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-10-06T01:26:24.270547" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:24.270612" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:26:24.138134" elapsed="0.132703"/>
</kw>
<msg time="2026-10-06T01:26:24.270930" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:24.270970" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:24.136046" elapsed="0.134960"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:24.271296" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:24.271077" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.271060" elapsed="0.000306"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:24.135907" elapsed="0.135482"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:26:23.864000" elapsed="0.407424"/>
</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-10-06T01:26:23.861877" elapsed="0.409612"/>
</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-10-06T01:26:23.859796" elapsed="0.411751"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:23.859234" elapsed="0.412359"/>
</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-10-06T01:26:23.858056" elapsed="0.413592"/>
</kw>
<kw name="Delete Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:24.275245" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:24.275008" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.274991" elapsed="0.000328"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:24.275649" 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-10-06T01:26:24.275774" 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-10-06T01:26:24.275512" elapsed="0.000321"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.276317" level="INFO">Attempting to execute command "sudo ovs-vsctl del-br br-s1" on remote system "10.30.170.234" 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-10-06T01:26:24.276030" elapsed="0.000330"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:24.276879" level="INFO">${conn_id} = 335</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-10-06T01:26:24.276535" elapsed="0.000368"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.277760" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:26:24.277832" 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-10-06T01:26:24.277461" elapsed="0.000393"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:24.278001" elapsed="0.000281"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:26:24.279062" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:26:24.714636" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:26:22 UTC 2026

  System load:  0.09               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:26:23 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:26:24.278828" elapsed="0.436009"/>
</kw>
<msg time="2026-10-06T01:26:24.714930" 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-10-06T01:26:24.278442" elapsed="0.436581"/>
</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-10-06T01:26:24.277103" elapsed="0.438041"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:26:24.715725" level="INFO">Executing command 'sudo ovs-vsctl del-br br-s1'.</msg>
<msg time="2026-10-06T01:26:24.788928" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:26:24.789178" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:26:24.789267" level="INFO">${stderr} = </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-10-06T01:26:24.715442" elapsed="0.073872"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:24.789668" elapsed="0.000526"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.791380" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:24.790790" elapsed="0.000676"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:24.791971" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:24.791640" elapsed="0.000468"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.791587" elapsed="0.000579"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:26:24.792473" elapsed="0.000054"/>
</return>
<status status="PASS" start="2026-10-06T01:26:24.792281" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.792249" elapsed="0.000397"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:24.792776" elapsed="0.000033"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:24.794434" elapsed="0.000731"/>
</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-10-06T01:26:24.795572" elapsed="0.000427"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:24.796318" elapsed="0.000200"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:24.793452" elapsed="0.003171"/>
</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-10-06T01:26:24.274555" elapsed="0.522277"/>
</kw>
<msg time="2026-10-06T01:26:24.796941" 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-10-06T01:26:24.274032" elapsed="0.523010"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl del-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:26:24.273555" elapsed="0.523794"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.798495" level="INFO">${dictionary} = {'br-s1': '0'}</msg>
<var>${dictionary}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:26:24.797831" elapsed="0.000719"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.806059" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:26:24.805275" elapsed="0.000842"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.807115" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:24.806450" elapsed="0.000720"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:26:24.807261" elapsed="0.000059"/>
</return>
<msg time="2026-10-06T01:26:24.807565" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:26:24.804437" elapsed="0.003196"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.813611" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:26:24.813193" elapsed="0.000455"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:26:24.813749" elapsed="0.000040"/>
</return>
<msg time="2026-10-06T01:26:24.813926" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:26:24.812221" elapsed="0.001738"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.815638" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:24.815327" elapsed="0.000392"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.816603" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:24.816062" elapsed="0.000599"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:24.825568" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:26:24.825882" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3371'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:26:24.826103" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:26:24.817114" elapsed="0.009024"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:24.816789" elapsed="0.009403"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:24.826438" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:24.826226" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.816763" elapsed="0.009786"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.828440" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;59306&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:24.827913" elapsed="0.000645"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:24.827548" elapsed="0.001054"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.827523" elapsed="0.001110"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.829450" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:24.829077" elapsed="0.000431"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:24.828749" elapsed="0.000802"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.828709" elapsed="0.000873"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.830390" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:24.829871" elapsed="0.000554"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:24.830843" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:24.830516" elapsed="0.000402"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.831532" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:24.831166" elapsed="0.000400"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:24.830949" elapsed="0.000662"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.830492" elapsed="0.001147"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.832717" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:24.831915" elapsed="0.000868"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:24.833170" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:24.832880" elapsed="0.000416"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.833978" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:24.833557" elapsed="0.000455"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:24.833332" elapsed="0.000726"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.832854" elapsed="0.001233"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:24.834281" elapsed="0.000436"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:26:24.835302" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:24.834958" elapsed="0.000379"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:26:24.835546" elapsed="0.000361"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:26:24.827062" elapsed="0.008926"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:26:24.836191" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-10-06T01:26:24.836075" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.836052" elapsed="0.000248"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:24.836494" elapsed="0.000029"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:26:24.836583" elapsed="0.000019"/>
</return>
<msg time="2026-10-06T01:26:24.837000" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:26:24.814394" elapsed="0.022647"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:26:24.837106" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:26:24.837277" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:26:24.811248" elapsed="0.026066"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.838791" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:26:24.838316" elapsed="0.000575"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:26:24.838094" elapsed="0.000848"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:26:24.837950" elapsed="0.001032"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:26:24.837599" elapsed="0.001451"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:24.808071" elapsed="0.031022"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.842866" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:24.842454" elapsed="0.000447"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:26:24.842959" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:26:24.843127" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:26:24.842012" elapsed="0.001147"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.844808" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:24.844462" elapsed="0.000405"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.845432" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:24.845128" elapsed="0.000359"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:24.858186" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01q8j2dkwra6wr3cwxwejtlypa1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:26:24.858355" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '1397'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":59306,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:26:24.858534" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:26:24.845922" elapsed="0.012647"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:24.845571" elapsed="0.013051"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:24.858915" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:24.858655" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.845548" elapsed="0.013478"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.860863" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":59306,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:24.860324" elapsed="0.000613"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:24.859971" elapsed="0.001013"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.859946" elapsed="0.001070"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.861857" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:24.861432" elapsed="0.000501"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:24.861087" elapsed="0.000891"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.861065" elapsed="0.000945"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.862836" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:24.862244" elapsed="0.000630"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:24.863253" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:24.862967" elapsed="0.000360"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.864022" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:24.863573" elapsed="0.000484"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:24.863358" elapsed="0.000745"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.862943" elapsed="0.001188"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.864883" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:24.864364" elapsed="0.000557"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:24.865288" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:24.865009" elapsed="0.000350"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.866121" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:24.865650" elapsed="0.000506"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:24.865410" elapsed="0.000801"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.864987" elapsed="0.001252"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:24.866432" elapsed="0.000451"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:26:24.867399" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:24.867099" elapsed="0.000334"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:26:24.867636" elapsed="0.000402"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:26:24.859461" elapsed="0.008654"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:26:24.868312" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:26:24.868201" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.868178" elapsed="0.000241"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:24.868610" elapsed="0.000027"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:26:24.868777" elapsed="0.000022"/>
</return>
<msg time="2026-10-06T01:26:24.869104" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:26:24.843565" elapsed="0.025574"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:26:24.869202" elapsed="0.000034"/>
</return>
<msg time="2026-10-06T01:26:24.869368" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:26:24.841373" elapsed="0.028028"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.871073" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:26:24.870576" elapsed="0.000587"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:26:24.870359" elapsed="0.000855"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:26:24.870026" elapsed="0.001227"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:26:24.869698" elapsed="0.001622"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:24.839202" elapsed="0.032162"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.874939" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:24.874523" elapsed="0.000450"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:26:24.875031" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:26:24.875199" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:26:24.874083" elapsed="0.001148"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.876884" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:24.876533" elapsed="0.000410"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.877614" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:24.877202" elapsed="0.000467"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:24.890353" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01iz04a3k2d6itg7w98bvdcezy1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:26:24.890519" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '1397'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":59306,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:26:24.890661" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:26:24.878102" elapsed="0.012624"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:24.877791" elapsed="0.013011"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:24.891047" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:24.890836" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.877766" elapsed="0.013390"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.892980" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":59306,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:24.892464" elapsed="0.000641"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:24.892099" elapsed="0.001051"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.892074" elapsed="0.001107"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.893999" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:24.893579" elapsed="0.000478"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:24.893252" elapsed="0.000848"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.893231" elapsed="0.000899"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.894884" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:24.894364" elapsed="0.000555"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:24.895290" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:24.895009" elapsed="0.000353"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.896041" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:24.895608" elapsed="0.000468"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:24.895393" elapsed="0.000729"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.894985" elapsed="0.001165"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.896893" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:24.896384" elapsed="0.000544"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:24.897297" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:24.897017" elapsed="0.000353"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.898011" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:24.897613" elapsed="0.000433"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:24.897401" elapsed="0.000690"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.896994" elapsed="0.001125"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:24.898311" elapsed="0.000443"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:26:24.899271" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:24.898972" elapsed="0.000332"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:26:24.899508" elapsed="0.000322"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:26:24.891588" elapsed="0.008319"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:26:24.900104" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-10-06T01:26:24.899992" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.899969" elapsed="0.000244"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:24.900405" elapsed="0.000027"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:26:24.900491" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:26:24.900883" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:26:24.875632" elapsed="0.025287"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:26:24.900982" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:26:24.901151" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/481d36a1-9b9f-4abe-9347-ba3329161944","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:26:24.873476" elapsed="0.027709"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.902890" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:26:24.902421" elapsed="0.000559"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:26:24.902154" elapsed="0.000876"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:26:24.902010" elapsed="0.001057"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:26:24.901462" elapsed="0.001671"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:24.871474" elapsed="0.031750"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:26:24.807804" elapsed="0.095458"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary {'br-s1': '0'}.</doc>
<status status="PASS" start="2026-10-06T01:26:24.803297" elapsed="0.100032"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:26:24.799041" elapsed="0.104355"/>
</kw>
<doc>Delete bridge br-s1 using OVS command and verify it gets applied in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:26:24.273179" elapsed="0.630297"/>
</kw>
<doc>Delete bridge with OVS command and verify it gets deleted from all instances.</doc>
<status status="PASS" start="2026-10-06T01:26:23.857390" elapsed="1.046239"/>
</test>
<test id="s1-s1-s2-t29" name="Verify Modified Port After Recover" line="145">
<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-10-06T01:26:24.905775" elapsed="0.000292"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:26:24.905390" elapsed="0.000751"/>
</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-10-06T01:26:24.907400" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:24.907280" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.907256" elapsed="0.000232"/>
</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-10-06T01:26:24.910183" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:24.910056" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.910031" elapsed="0.000245"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.911194" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:26:24.910871" elapsed="0.000349"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:24.911652" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:24.911384" elapsed="0.000306"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:26:24.911755" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:26:24.911896" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:26:24.910489" elapsed="0.001432"/>
</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-10-06T01:26:24.916145" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:24.916058" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.916040" elapsed="0.000170"/>
</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-10-06T01:26:24.917376" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:24.917291" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:24.917274" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:24.917855" level="INFO">${karaf_connection_index} = 222</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-10-06T01:26:24.917583" elapsed="0.000296"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:24.918225" 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-10-06T01:26:24.918045" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:24.953773" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:24.918848" elapsed="0.035123"/>
</kw>
<msg time="2026-10-06T01:26:24.954150" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:24.954192" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:24.918402" elapsed="0.035825"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:25.021591" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "M "o "d "i "f "i "e "d "[C "P "o "r "[78Ct "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:24.954879" elapsed="0.066975"/>
</kw>
<msg time="2026-10-06T01:26:25.022081" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:25.022123" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:24.954398" elapsed="0.067761"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:25.022484" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:25.022247" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:25.022226" elapsed="0.000358"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:25.023156" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "M "o "d "i "f "i "e "d "[C "P "o "r "[78Ct "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:25.022800" elapsed="0.000438"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:25.023496" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:25.023300" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:25.023283" elapsed="0.000324"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:25.023637" elapsed="0.000031"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:25.026225" elapsed="0.000496"/>
</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-10-06T01:26:25.027985" elapsed="0.000465"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:25.029646" elapsed="0.000553"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:25.024476" elapsed="0.005788"/>
</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-10-06T01:26:25.023971" elapsed="0.006408"/>
</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="PASS" start="2026-10-06T01:26:24.917030" elapsed="0.113425"/>
</kw>
<msg time="2026-10-06T01:26:25.030538" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:25.030578" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:24.916358" elapsed="0.114256"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:25.030819" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:26:25.030699" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:25.030665" elapsed="0.000231"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:26:25.031217" elapsed="0.000023"/>
</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-10-06T01:26:25.031568" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:25.031632" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:26:24.915753" elapsed="0.116101"/>
</kw>
<msg time="2026-10-06T01:26:25.031943" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:25.031982" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:24.912246" elapsed="0.119780"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:25.032316" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:25.032098" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:25.032081" elapsed="0.000307"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:24.912108" elapsed="0.120302"/>
</iter>
<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-10-06T01:26:25.035022" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:25.034937" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:25.034920" elapsed="0.000165"/>
</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-10-06T01:26:25.036237" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:25.036121" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:25.036104" elapsed="0.000198"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:25.036667" level="INFO">${karaf_connection_index} = 224</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-10-06T01:26:25.036442" elapsed="0.000267"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:25.037058" 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-10-06T01:26:25.036883" elapsed="0.000199"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:25.072381" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:25.037711" elapsed="0.034873"/>
</kw>
<msg time="2026-10-06T01:26:25.072799" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:25.072841" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:25.037276" elapsed="0.035601"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:25.142214" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "M "o "d "i "f "i "e "d "[C "P "o "r "[78Ct "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:25.073509" elapsed="0.068890"/>
</kw>
<msg time="2026-10-06T01:26:25.142557" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:25.142598" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:25.073061" elapsed="0.069571"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:25.142970" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:25.142751" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:25.142714" elapsed="0.000353"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:25.143591" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "M "o "d "i "f "i "e "d "[C "P "o "r "[78Ct "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:25.143247" elapsed="0.000442"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:25.143969" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:25.143770" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:25.143752" elapsed="0.000311"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:25.144096" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:25.146666" elapsed="0.000545"/>
</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-10-06T01:26:25.148473" elapsed="0.000514"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:25.150418" elapsed="0.000339"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:25.144952" elapsed="0.005875"/>
</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-10-06T01:26:25.144398" elapsed="0.006547"/>
</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="PASS" start="2026-10-06T01:26:25.035862" elapsed="0.115159"/>
</kw>
<msg time="2026-10-06T01:26:25.151105" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:25.151147" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:25.035230" elapsed="0.115952"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:25.151336" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:26:25.151251" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:25.151234" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:25.151822" elapsed="0.000025"/>
</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-10-06T01:26:25.152186" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:25.152252" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:26:25.034607" elapsed="0.117732"/>
</kw>
<msg time="2026-10-06T01:26:25.152426" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:25.152467" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:25.032703" elapsed="0.119799"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:25.152912" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:25.152572" elapsed="0.000391"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:25.152555" elapsed="0.000430"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:25.032544" elapsed="0.120462"/>
</iter>
<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-10-06T01:26:25.155556" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:25.155471" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:25.155453" elapsed="0.000165"/>
</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-10-06T01:26:25.156754" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:25.156633" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:25.156616" elapsed="0.000202"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:25.157193" level="INFO">${karaf_connection_index} = 226</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-10-06T01:26:25.156961" elapsed="0.000256"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:25.157555" 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-10-06T01:26:25.157377" elapsed="0.000202"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:25.190841" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:25.158181" elapsed="0.032831"/>
</kw>
<msg time="2026-10-06T01:26:25.191188" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:25.191229" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:25.157761" elapsed="0.033503"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:25.257522" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "M "o "d "i "f "i "e "d "[C "P "o "r "[78Ct "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:25.191879" elapsed="0.065836"/>
</kw>
<msg time="2026-10-06T01:26:25.257885" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:25.257926" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:25.191428" elapsed="0.066533"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:25.258233" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:25.258031" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:25.258013" elapsed="0.000314"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:25.258890" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "M "o "d "i "f "i "e "d "[C "P "o "r "[78Ct "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:25.258506" elapsed="0.000463"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:25.259229" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:25.259035" elapsed="0.000263"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:25.259018" elapsed="0.000303"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:25.259351" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:25.261842" elapsed="0.000469"/>
</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-10-06T01:26:25.263526" elapsed="0.000488"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:25.265187" elapsed="0.000306"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:25.260189" elapsed="0.005371"/>
</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-10-06T01:26:25.259649" elapsed="0.006295"/>
</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="PASS" start="2026-10-06T01:26:25.156375" elapsed="0.109655"/>
</kw>
<msg time="2026-10-06T01:26:25.266113" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:25.266152" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:25.155795" elapsed="0.110392"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:25.266339" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:26:25.266256" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:25.266239" elapsed="0.000177"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:25.266777" elapsed="0.000025"/>
</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-10-06T01:26:25.267078" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:25.267141" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:26:25.155172" elapsed="0.112053"/>
</kw>
<msg time="2026-10-06T01:26:25.267307" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:25.267347" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:25.153262" elapsed="0.114120"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:25.267665" elapsed="0.000109"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:25.267450" elapsed="0.000356"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:25.267434" elapsed="0.000394"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:25.153124" elapsed="0.114725"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:26:24.911967" elapsed="0.355909"/>
</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-10-06T01:26:24.909608" elapsed="0.358324"/>
</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-10-06T01:26:24.906928" elapsed="0.361055"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:24.906348" elapsed="0.361677"/>
</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-10-06T01:26:24.904903" elapsed="0.363170"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:26:25.270330" level="INFO">${port_dictionary} = {'br01': '6', 'vx2': '3', '10.0.0.19': '1'}</msg>
<var>${port_dictionary}</var>
<arg>br01=6</arg>
<arg>vx2=3</arg>
<arg>10.0.0.19=1</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:26:25.270003" elapsed="0.000351"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:26:25.274870" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:26:25.273549" elapsed="0.001358">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:26:26.284539" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:26:26.281526" elapsed="0.003110">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:26:27.295190" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:26:27.292048" elapsed="0.003263">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:26:28.305168" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:26:28.302032" elapsed="0.003234">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:26:29.315756" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:26:29.312557" elapsed="0.003302">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:26:30.326766" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:26:30.323594" elapsed="0.003291">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<msg time="2026-10-06T01:26:30.327105" level="FAIL">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</msg>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-10-06T01:26:25.270556" elapsed="5.056891">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:26:25.269616" elapsed="5.058174">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify modified port exists in all instances.</doc>
<status status="FAIL" start="2026-10-06T01:26:24.904224" elapsed="5.423857">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s1-s2-t30" name="Delete Port In New Owner After Recover" line="149">
<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-10-06T01:26:30.331506" elapsed="0.000577"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:26:30.330916" elapsed="0.001283"/>
</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-10-06T01:26:30.334734" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:30.334401" elapsed="0.000441"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.334351" elapsed="0.000541"/>
</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-10-06T01:26:30.339428" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:30.339214" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.339170" elapsed="0.000399"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:26:30.341927" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:26:30.341120" elapsed="0.000865"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:30.343114" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:30.342356" elapsed="0.000820"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:26:30.343280" elapsed="0.000076"/>
</return>
<msg time="2026-10-06T01:26:30.343591" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:26:30.340221" elapsed="0.003420"/>
</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-10-06T01:26:30.349726" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:30.349485" elapsed="0.000348"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.349446" elapsed="0.000434"/>
</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-10-06T01:26:30.352537" elapsed="0.000042"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:30.352345" elapsed="0.000533"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.352307" elapsed="0.000638"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:30.353874" level="INFO">${karaf_connection_index} = 222</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-10-06T01:26:30.353283" elapsed="0.000647"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:30.354772" 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-10-06T01:26:30.354297" elapsed="0.000533"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:30.389618" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:30.356201" elapsed="0.033723"/>
</kw>
<msg time="2026-10-06T01:26:30.390148" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:30.390206" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:30.355174" elapsed="0.035083"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:30.473311" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "N "e "w "[C "[78CO "[A[78Cw
 "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:30.391123" elapsed="0.082507"/>
</kw>
<msg time="2026-10-06T01:26:30.473903" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:30.473947" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:30.390485" elapsed="0.083498"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:30.474391" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:30.474089" elapsed="0.000379"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.474058" elapsed="0.000436"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:30.475144" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "N "e "w "[C "[78CO "[A[78Cw
 "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:30.474713" elapsed="0.000538"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:30.475521" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:30.475322" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.475305" elapsed="0.000312"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:30.475652" elapsed="0.000073"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:30.478388" elapsed="0.000532"/>
</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-10-06T01:26:30.480248" elapsed="0.000541"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:30.482031" elapsed="0.000325"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:30.476554" elapsed="0.005870"/>
</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-10-06T01:26:30.476019" elapsed="0.006524"/>
</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="PASS" start="2026-10-06T01:26:30.351761" elapsed="0.130860"/>
</kw>
<msg time="2026-10-06T01:26:30.482740" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:30.482783" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:30.350209" elapsed="0.132609"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:30.482975" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:26:30.482889" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.482872" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:26:30.483388" elapsed="0.000024"/>
</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-10-06T01:26:30.483813" elapsed="0.000031"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:30.483892" 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="PASS" start="2026-10-06T01:26:30.348833" elapsed="0.135149"/>
</kw>
<msg time="2026-10-06T01:26:30.484069" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:30.484108" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:30.344499" elapsed="0.139647"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:30.484438" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:30.484218" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.484202" elapsed="0.000307"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:30.344186" elapsed="0.140345"/>
</iter>
<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-10-06T01:26:30.487191" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:30.487102" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.487085" elapsed="0.000168"/>
</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-10-06T01:26:30.488654" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:30.488569" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.488552" elapsed="0.000202"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:30.489127" level="INFO">${karaf_connection_index} = 224</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-10-06T01:26:30.488897" elapsed="0.000255"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:30.489486" 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-10-06T01:26:30.489311" elapsed="0.000199"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:30.525491" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:30.490111" elapsed="0.035601"/>
</kw>
<msg time="2026-10-06T01:26:30.525896" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:30.525937" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:30.489663" elapsed="0.036310"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:30.603813" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "N "e "w "[C "[78CO "[A[78Cw
 "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:30.526581" elapsed="0.077430"/>
</kw>
<msg time="2026-10-06T01:26:30.604175" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:30.604216" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:30.526144" elapsed="0.078107"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:30.604541" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:30.604328" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.604308" elapsed="0.000327"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:30.605205" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "N "e "w "[C "[78CO "[A[78Cw
 "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:30.604858" elapsed="0.000429"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:30.605547" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:30.605349" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.605333" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:30.605671" elapsed="0.000062"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:30.608359" elapsed="0.000528"/>
</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-10-06T01:26:30.610140" elapsed="0.000470"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:30.611872" elapsed="0.000333"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:30.606559" elapsed="0.005714"/>
</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-10-06T01:26:30.606053" elapsed="0.006341"/>
</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="PASS" start="2026-10-06T01:26:30.488312" elapsed="0.124161"/>
</kw>
<msg time="2026-10-06T01:26:30.612557" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:30.612597" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:30.487401" elapsed="0.125232"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:30.613035" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:26:30.612948" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.612928" elapsed="0.000186"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:30.613523" elapsed="0.000024"/>
</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-10-06T01:26:30.613862" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:30.613927" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:26:30.486805" elapsed="0.127209"/>
</kw>
<msg time="2026-10-06T01:26:30.614100" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:30.614141" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:30.484832" elapsed="0.129344"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:30.614463" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:30.614245" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.614229" elapsed="0.000306"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:30.484653" elapsed="0.129904"/>
</iter>
<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-10-06T01:26:30.617321" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:30.617236" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.617218" elapsed="0.000166"/>
</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-10-06T01:26:30.618626" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:30.618542" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.618525" elapsed="0.000222"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:30.619123" level="INFO">${karaf_connection_index} = 226</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-10-06T01:26:30.618892" elapsed="0.000256"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:30.619486" 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-10-06T01:26:30.619308" elapsed="0.000202"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:30.652212" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:30.620106" elapsed="0.032280"/>
</kw>
<msg time="2026-10-06T01:26:30.652583" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:30.652625" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:30.619661" elapsed="0.032999"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:30.727357" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "N "e "w "[C "[78CO "[A[78Cw
 "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:30.653284" elapsed="0.074619"/>
</kw>
<msg time="2026-10-06T01:26:30.728163" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:30.728208" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:30.652862" elapsed="0.075382"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:30.728752" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:30.728378" elapsed="0.000456"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.728334" elapsed="0.000530"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:30.729526" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "N "e "w "[C "[78CO "[A[78Cw
 "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:30.729055" elapsed="0.000557"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:30.729917" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:30.729709" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.729658" elapsed="0.000357"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:30.730055" elapsed="0.000047"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:30.732884" elapsed="0.000496"/>
</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-10-06T01:26:30.734759" elapsed="0.000487"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:30.736641" elapsed="0.000355"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:30.731028" elapsed="0.006041"/>
</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-10-06T01:26:30.730425" elapsed="0.006766"/>
</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="PASS" start="2026-10-06T01:26:30.618284" elapsed="0.118986"/>
</kw>
<msg time="2026-10-06T01:26:30.737360" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:30.737400" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:30.617531" elapsed="0.119905"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:30.737596" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:26:30.737509" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.737491" elapsed="0.000270"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:30.738115" elapsed="0.000024"/>
</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-10-06T01:26:30.738429" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:30.738496" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:26:30.616938" elapsed="0.121650"/>
</kw>
<msg time="2026-10-06T01:26:30.738709" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:30.738754" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:30.614946" elapsed="0.123847"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:30.739100" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:30.738868" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.738851" elapsed="0.000325"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:30.614673" elapsed="0.124526"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:26:30.343839" elapsed="0.395393"/>
</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-10-06T01:26:30.338468" elapsed="0.400821"/>
</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-10-06T01:26:30.333772" elapsed="0.405644"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:30.332593" elapsed="0.406869"/>
</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-10-06T01:26:30.330006" elapsed="0.409508"/>
</kw>
<kw name="Delete Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:26:30.743874" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<doc>Delete port vx2 from bridge br01 in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:26:30.742643" elapsed="0.001268">Variable '${new_owner}' not found.</status>
</kw>
<doc>Delete port in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:26:30.328644" elapsed="0.415411">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s1-s2-t31" name="Delete Bridge In New Owner And Verify After Recover" line="153">
<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-10-06T01:26:30.745434" elapsed="0.000225"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:26:30.745186" elapsed="0.000552"/>
</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-10-06T01:26:30.746630" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:30.746544" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.746526" elapsed="0.000194"/>
</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-10-06T01:26:30.748564" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:30.748480" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.748463" elapsed="0.000163"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:26:30.749549" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:26:30.749221" elapsed="0.000355"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:30.750064" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:30.749788" elapsed="0.000300"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:26:30.750128" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:26:30.750254" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:26:30.748869" elapsed="0.001408"/>
</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-10-06T01:26:30.752859" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:30.752773" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.752755" elapsed="0.000167"/>
</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-10-06T01:26:30.754076" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:30.753991" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.753974" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:30.754520" level="INFO">${karaf_connection_index} = 222</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-10-06T01:26:30.754286" elapsed="0.000259"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:30.754948" 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-10-06T01:26:30.754760" elapsed="0.000227"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:30.789081" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:30.755558" elapsed="0.033700"/>
</kw>
<msg time="2026-10-06T01:26:30.789437" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:30.789480" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:30.755142" elapsed="0.034374"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:30.870166" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "N "e "[78Cw "[A[78C
 "O "w "n "e "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:30.790136" elapsed="0.080220"/>
</kw>
<msg time="2026-10-06T01:26:30.870514" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:30.870598" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:30.789711" elapsed="0.080924"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:30.870948" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:30.870739" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.870719" elapsed="0.000325"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:30.871569" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "N "e "[78Cw "[A[78C
 "O "w "n "e "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:30.871226" elapsed="0.000431"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:30.872035" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:30.871834" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.871816" elapsed="0.000314"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:30.872160" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:30.874640" elapsed="0.000519"/>
</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-10-06T01:26:30.876418" elapsed="0.000537"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:30.878328" elapsed="0.000313"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:30.872983" elapsed="0.005752"/>
</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-10-06T01:26:30.872444" elapsed="0.006411"/>
</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="PASS" start="2026-10-06T01:26:30.753667" elapsed="0.125264"/>
</kw>
<msg time="2026-10-06T01:26:30.879012" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:30.879051" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:30.753068" elapsed="0.126019"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:30.879240" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:26:30.879156" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.879139" elapsed="0.000177"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:26:30.879640" elapsed="0.000024"/>
</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-10-06T01:26:30.880006" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:30.880071" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:26:30.752447" elapsed="0.127711"/>
</kw>
<msg time="2026-10-06T01:26:30.880241" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:30.880280" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:30.750611" elapsed="0.129706"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:30.880605" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:30.880384" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.880368" elapsed="0.000426"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:30.750471" elapsed="0.130348"/>
</iter>
<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-10-06T01:26:30.883312" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:30.883227" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.883210" elapsed="0.000165"/>
</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-10-06T01:26:30.884519" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:30.884388" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:30.884371" elapsed="0.000215"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:30.884998" level="INFO">${karaf_connection_index} = 224</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-10-06T01:26:30.884768" elapsed="0.000255"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:30.885359" 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-10-06T01:26:30.885184" elapsed="0.000199"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:30.922974" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:30.885985" elapsed="0.037181"/>
</kw>
<msg time="2026-10-06T01:26:30.923325" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:30.923366" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:30.885535" elapsed="0.037867"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:31.005792" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "N "e "[78Cw "[A[78C
 "O "w "n "e "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:30.924030" elapsed="0.082036"/>
</kw>
<msg time="2026-10-06T01:26:31.006262" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:31.006304" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:30.923566" elapsed="0.082773"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.006749" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:31.006437" elapsed="0.000390"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.006407" elapsed="0.000446"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:31.007449" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "N "e "[78Cw "[A[78C
 "O "w "n "e "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:31.007041" elapsed="0.000498"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.007851" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:31.007601" elapsed="0.000323"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.007584" elapsed="0.000363"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:31.007983" elapsed="0.000036"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:31.010692" elapsed="0.000505"/>
</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-10-06T01:26:31.012473" elapsed="0.000519"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:31.014405" elapsed="0.000352"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:31.008904" elapsed="0.005923"/>
</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-10-06T01:26:31.008307" elapsed="0.006640"/>
</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="PASS" start="2026-10-06T01:26:30.884131" elapsed="0.130894"/>
</kw>
<msg time="2026-10-06T01:26:31.015112" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:31.015153" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:30.883522" elapsed="0.131669"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:31.015350" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:26:31.015264" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.015247" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.015863" elapsed="0.000024"/>
</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-10-06T01:26:31.016283" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:31.016349" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:26:30.882937" elapsed="0.133501"/>
</kw>
<msg time="2026-10-06T01:26:31.016526" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:31.016566" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:30.881070" elapsed="0.135532"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.016933" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:31.016689" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.016657" elapsed="0.000348"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:30.880931" elapsed="0.136097"/>
</iter>
<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-10-06T01:26:31.019763" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:31.019645" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.019628" elapsed="0.000200"/>
</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-10-06T01:26:31.020967" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:31.020883" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.020866" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:31.021413" level="INFO">${karaf_connection_index} = 226</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-10-06T01:26:31.021175" elapsed="0.000263"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:31.021813" 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-10-06T01:26:31.021599" elapsed="0.000239"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:31.054748" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:31.022405" elapsed="0.032517"/>
</kw>
<msg time="2026-10-06T01:26:31.055099" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:31.055141" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.021992" elapsed="0.033183"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:31.139022" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "N "e "[78Cw "[A[78C
 "O "w "n "e "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:31.055793" elapsed="0.083420"/>
</kw>
<msg time="2026-10-06T01:26:31.139378" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:31.139421" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.055339" elapsed="0.084118"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.139803" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:31.139531" elapsed="0.000347"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.139512" elapsed="0.000389"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:31.140427" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "N "e "[78Cw "[A[78C
 "O "w "n "e "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:31.140082" elapsed="0.000435"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.140812" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:31.140580" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.140563" elapsed="0.000344"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:31.140985" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:31.143454" elapsed="0.000505"/>
</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-10-06T01:26:31.145180" elapsed="0.000454"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:31.147052" elapsed="0.000304"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:31.141799" elapsed="0.005623"/>
</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-10-06T01:26:31.141261" elapsed="0.006276"/>
</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="PASS" start="2026-10-06T01:26:31.020580" elapsed="0.127035"/>
</kw>
<msg time="2026-10-06T01:26:31.147726" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:31.147768" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.019975" elapsed="0.127829"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:31.147961" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:26:31.147875" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.147858" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.148353" elapsed="0.000024"/>
</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-10-06T01:26:31.148656" elapsed="0.000085"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:31.148787" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:26:31.019339" elapsed="0.129534"/>
</kw>
<msg time="2026-10-06T01:26:31.148957" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:31.148997" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.017293" elapsed="0.131738"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.149319" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:31.149100" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.149084" elapsed="0.000306"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:31.017154" elapsed="0.132257"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:26:30.750328" elapsed="0.399112"/>
</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-10-06T01:26:30.748192" elapsed="0.401305"/>
</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-10-06T01:26:30.746283" elapsed="0.403270"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:30.745886" elapsed="0.403712"/>
</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-10-06T01:26:30.744828" elapsed="0.404825"/>
</kw>
<kw name="Delete Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:26:31.155095" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<doc>Delete bridge br01 in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:26:31.153824" elapsed="0.001323">Variable '${new_owner}' not found.</status>
</kw>
<doc>Delete bridge in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:26:30.744278" elapsed="0.411033">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s1-s2-t32" name="Create Bridge In Old Candidate and Verify After Recover" line="157">
<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-10-06T01:26:31.156801" elapsed="0.000232"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:26:31.156516" elapsed="0.000572"/>
</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-10-06T01:26:31.158169" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:31.158068" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.158047" elapsed="0.000188"/>
</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-10-06T01:26:31.160200" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:31.160116" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.160099" elapsed="0.000164"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:26:31.161202" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:26:31.160863" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:31.161649" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:31.161379" elapsed="0.000294"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:26:31.161777" elapsed="0.000030"/>
</return>
<msg time="2026-10-06T01:26:31.161910" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:26:31.160472" elapsed="0.001461"/>
</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-10-06T01:26:31.203356" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:31.203233" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.203208" elapsed="0.000236"/>
</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-10-06T01:26:31.204826" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:31.204738" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.204719" elapsed="0.000170"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:31.205291" level="INFO">${karaf_connection_index} = 222</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-10-06T01:26:31.205034" elapsed="0.000284"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:31.205664" 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-10-06T01:26:31.205483" elapsed="0.000281"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:31.238957" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:31.206349" elapsed="0.032795"/>
</kw>
<msg time="2026-10-06T01:26:31.239309" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:31.239351" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.205924" elapsed="0.033463"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:31.322458" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "[78Cd "[A[78C
 "C "a "n "d "i "d "a "t "e "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:31.240017" elapsed="0.082639"/>
</kw>
<msg time="2026-10-06T01:26:31.322857" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:31.322898" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.239550" elapsed="0.083384"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.323226" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:31.323008" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.322989" elapsed="0.000333"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:31.323885" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "[78Cd "[A[78C
 "C "a "n "d "i "d "a "t "e "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:31.323501" elapsed="0.000485"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.324245" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:31.324048" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.324032" elapsed="0.000307"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:31.324370" elapsed="0.000039"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:31.327194" elapsed="0.000514"/>
</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-10-06T01:26:31.328999" elapsed="0.000497"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:31.330982" elapsed="0.000315"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:31.325411" elapsed="0.005954"/>
</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-10-06T01:26:31.324854" elapsed="0.006629"/>
</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="PASS" start="2026-10-06T01:26:31.204435" elapsed="0.127127"/>
</kw>
<msg time="2026-10-06T01:26:31.331644" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:31.331714" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.203636" elapsed="0.128116"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:31.331909" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:26:31.331823" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.331806" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:26:31.332322" elapsed="0.000024"/>
</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-10-06T01:26:31.332623" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:31.332795" 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="PASS" start="2026-10-06T01:26:31.202775" elapsed="0.130111"/>
</kw>
<msg time="2026-10-06T01:26:31.332973" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:31.333013" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.162283" elapsed="0.170766"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.333338" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:31.333119" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.333103" elapsed="0.000306"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:31.162137" elapsed="0.171294"/>
</iter>
<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-10-06T01:26:31.336072" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:31.335986" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.335968" elapsed="0.000167"/>
</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-10-06T01:26:31.337238" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:31.337154" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.337137" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:31.337673" level="INFO">${karaf_connection_index} = 224</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-10-06T01:26:31.337443" elapsed="0.000302"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:31.338085" 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-10-06T01:26:31.337909" elapsed="0.000229"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:31.373114" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:31.338744" elapsed="0.034600"/>
</kw>
<msg time="2026-10-06T01:26:31.373527" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:31.373568" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.338293" elapsed="0.035311"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:31.468505" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "[78Cd "[A[78C
 "C "a "n "d "i "d "a "t "e "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:31.374343" elapsed="0.094481"/>
</kw>
<msg time="2026-10-06T01:26:31.468987" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:31.469029" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.373867" elapsed="0.095198"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.469378" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:31.469150" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.469124" elapsed="0.000352"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:31.470057" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "[78Cd "[A[78C
 "C "a "n "d "i "d "a "t "e "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:31.469661" elapsed="0.000485"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.470406" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:31.470208" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.470191" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:31.470535" elapsed="0.000034"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:31.473171" elapsed="0.000481"/>
</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-10-06T01:26:31.474943" elapsed="0.000470"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:31.476623" elapsed="0.000348"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:31.471401" elapsed="0.005640"/>
</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-10-06T01:26:31.470885" elapsed="0.006278"/>
</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="PASS" start="2026-10-06T01:26:31.336896" elapsed="0.140349"/>
</kw>
<msg time="2026-10-06T01:26:31.477329" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:31.477369" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.336283" elapsed="0.141122"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:31.477559" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:26:31.477475" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.477458" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.478282" elapsed="0.000023"/>
</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-10-06T01:26:31.478585" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:31.478649" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:26:31.335627" elapsed="0.143142"/>
</kw>
<msg time="2026-10-06T01:26:31.478856" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:31.478897" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.333721" elapsed="0.145211"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.479222" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:31.479002" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.478986" elapsed="0.000307"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:31.333556" elapsed="0.145759"/>
</iter>
<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-10-06T01:26:31.481933" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:31.481847" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.481829" elapsed="0.000199"/>
</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-10-06T01:26:31.483143" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:31.483059" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.483042" elapsed="0.000169"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:31.483585" level="INFO">${karaf_connection_index} = 226</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-10-06T01:26:31.483353" elapsed="0.000256"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:31.484012" 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-10-06T01:26:31.483833" elapsed="0.000203"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:31.530603" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:31.484599" elapsed="0.046226"/>
</kw>
<msg time="2026-10-06T01:26:31.530984" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:31.531026" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.484190" elapsed="0.046871"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:31.612830" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "[78Cd "[A[78C
 "C "a "n "d "i "d "a "t "e "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:31.531640" elapsed="0.081439"/>
</kw>
<msg time="2026-10-06T01:26:31.613265" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:31.613307" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.531223" elapsed="0.082121"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.613724" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:31.613435" elapsed="0.000365"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.613409" elapsed="0.000416"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:31.614385" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "[78Cd "[A[78C
 "C "a "n "d "i "d "a "t "e "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:31.614008" elapsed="0.000468"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.614764" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:31.614537" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.614520" elapsed="0.000338"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:31.614893" elapsed="0.000034"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:31.617507" elapsed="0.000544"/>
</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-10-06T01:26:31.619316" elapsed="0.000524"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:31.621081" elapsed="0.000320"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:31.615772" elapsed="0.005700"/>
</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-10-06T01:26:31.615207" elapsed="0.006388"/>
</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="PASS" start="2026-10-06T01:26:31.482801" elapsed="0.139073"/>
</kw>
<msg time="2026-10-06T01:26:31.621969" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:31.622010" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.482179" elapsed="0.139867"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:31.622229" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:26:31.622138" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.622115" elapsed="0.000320"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.622808" elapsed="0.000024"/>
</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-10-06T01:26:31.623136" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:31.623203" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:26:31.481517" elapsed="0.141774"/>
</kw>
<msg time="2026-10-06T01:26:31.623377" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:31.623418" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.479574" elapsed="0.143880"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.623904" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:31.623525" elapsed="0.000432"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.623508" elapsed="0.000471"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:31.479436" elapsed="0.144565"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:26:31.161989" elapsed="0.462044"/>
</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-10-06T01:26:31.159820" elapsed="0.464272"/>
</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-10-06T01:26:31.157647" elapsed="0.466501"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.157235" elapsed="0.466959"/>
</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-10-06T01:26:31.156152" elapsed="0.468092"/>
</kw>
<kw name="Create Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:26:31.628394" level="FAIL">Variable '${original_candidate}' not found.</msg>
<arg>${original_candidate}</arg>
<doc>Create bridge br01 in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:26:31.627120" elapsed="0.001309">Variable '${original_candidate}' not found.</status>
</kw>
<doc>Create Bridge in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:26:31.155552" elapsed="0.473012">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s1-s2-t33" name="Create Port In Old Owner and Verify After Recover" line="161">
<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-10-06T01:26:31.630133" elapsed="0.000200"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:26:31.629888" elapsed="0.000494"/>
</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-10-06T01:26:31.631289" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:31.631203" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.631186" elapsed="0.000166"/>
</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-10-06T01:26:31.633227" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:31.633144" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.633127" elapsed="0.000162"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:26:31.634214" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:26:31.633886" elapsed="0.000354"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:31.634657" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:31.634389" elapsed="0.000340"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:26:31.634773" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:26:31.634901" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:26:31.633493" elapsed="0.001431"/>
</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-10-06T01:26:31.637422" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:31.637338" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.637320" elapsed="0.000165"/>
</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-10-06T01:26:31.638623" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:31.638539" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.638522" elapsed="0.000197"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:31.639103" level="INFO">${karaf_connection_index} = 222</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-10-06T01:26:31.638863" elapsed="0.000265"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:31.639464" 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-10-06T01:26:31.639287" elapsed="0.000201"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:31.673307" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:31.640095" elapsed="0.033413"/>
</kw>
<msg time="2026-10-06T01:26:31.673664" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:31.673739" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.639642" elapsed="0.034134"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:31.763130" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "[78CO "[A[78Cw
 "n "e "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:31.674365" elapsed="0.088999"/>
</kw>
<msg time="2026-10-06T01:26:31.763549" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:31.763591" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.673941" elapsed="0.089686"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.764009" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:31.763757" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.763731" elapsed="0.000381"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:31.764709" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "[78CO "[A[78Cw
 "n "e "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:31.764294" elapsed="0.000509"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.765088" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:31.764876" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.764858" elapsed="0.000325"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:31.765216" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:31.767886" elapsed="0.000487"/>
</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-10-06T01:26:31.769629" elapsed="0.000512"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:31.771346" elapsed="0.000321"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:31.766095" elapsed="0.005685"/>
</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-10-06T01:26:31.765522" elapsed="0.006379"/>
</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="PASS" start="2026-10-06T01:26:31.638281" elapsed="0.133698"/>
</kw>
<msg time="2026-10-06T01:26:31.772065" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:31.772105" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.637665" elapsed="0.134476"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:31.772296" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:26:31.772210" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.772193" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:26:31.773102" elapsed="0.000025"/>
</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-10-06T01:26:31.773409" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:31.773473" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:26:31.637051" elapsed="0.136509"/>
</kw>
<msg time="2026-10-06T01:26:31.773647" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:31.773718" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.635256" elapsed="0.138500"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.774048" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:31.773828" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.773812" elapsed="0.000307"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:31.635117" elapsed="0.139024"/>
</iter>
<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-10-06T01:26:31.776767" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:31.776620" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.776603" elapsed="0.000227"/>
</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-10-06T01:26:31.778022" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:31.777937" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.777920" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:31.778603" level="INFO">${karaf_connection_index} = 224</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-10-06T01:26:31.778275" elapsed="0.000362"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:31.779045" 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-10-06T01:26:31.778859" elapsed="0.000211"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:31.814023" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:31.779662" elapsed="0.034671"/>
</kw>
<msg time="2026-10-06T01:26:31.814594" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:31.814639" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.779227" elapsed="0.035479"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:31.895347" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "[78CO "[A[78Cw
 "n "e "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:31.815596" elapsed="0.079958"/>
</kw>
<msg time="2026-10-06T01:26:31.895750" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:31.895798" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.814994" elapsed="0.080841"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.896196" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:31.895938" elapsed="0.000334"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.895905" elapsed="0.000398"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:31.896876" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "[78CO "[A[78Cw
 "n "e "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:31.896490" elapsed="0.000479"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.897233" elapsed="0.000103"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:31.897032" elapsed="0.000358"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.897014" elapsed="0.000399"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:31.897451" elapsed="0.000044"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:31.900234" elapsed="0.000526"/>
</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-10-06T01:26:31.902045" elapsed="0.000498"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:31.903960" elapsed="0.000317"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:31.898417" elapsed="0.005929"/>
</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-10-06T01:26:31.897841" elapsed="0.006624"/>
</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="PASS" start="2026-10-06T01:26:31.777562" elapsed="0.126984"/>
</kw>
<msg time="2026-10-06T01:26:31.904634" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:31.904701" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.776984" elapsed="0.127756"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:31.904906" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:26:31.904819" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.904796" elapsed="0.000188"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.905373" elapsed="0.000023"/>
</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-10-06T01:26:31.905834" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:31.905902" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:26:31.776321" elapsed="0.129672"/>
</kw>
<msg time="2026-10-06T01:26:31.906088" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:31.906130" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.774397" elapsed="0.131769"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:31.906461" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:31.906239" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.906223" elapsed="0.000309"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:31.774260" elapsed="0.132295"/>
</iter>
<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-10-06T01:26:31.909285" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:31.909200" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.909182" elapsed="0.000165"/>
</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-10-06T01:26:31.910435" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:31.910351" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:31.910334" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:31.910908" level="INFO">${karaf_connection_index} = 226</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-10-06T01:26:31.910639" elapsed="0.000294"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:31.911282" 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-10-06T01:26:31.911094" elapsed="0.000212"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:31.944770" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:31.911903" elapsed="0.033057"/>
</kw>
<msg time="2026-10-06T01:26:31.945117" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:31.945158" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.911458" elapsed="0.033775"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:32.026046" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "[78CO "[A[78Cw
 "n "e "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:31.945856" elapsed="0.080373"/>
</kw>
<msg time="2026-10-06T01:26:32.026384" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:32.026425" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.945398" elapsed="0.081063"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.026766" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:32.026531" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.026514" elapsed="0.000349"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:32.027375" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "[78CO "[A[78Cw
 "n "e "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:32.027042" elapsed="0.000419"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.027744" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:32.027521" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.027505" elapsed="0.000333"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:32.027869" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:32.030357" elapsed="0.000505"/>
</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-10-06T01:26:32.032064" elapsed="0.000442"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:32.033920" elapsed="0.000304"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:32.028624" elapsed="0.005666"/>
</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-10-06T01:26:32.028137" elapsed="0.006268"/>
</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="PASS" start="2026-10-06T01:26:31.910092" elapsed="0.124389"/>
</kw>
<msg time="2026-10-06T01:26:32.034562" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:32.034602" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.909492" elapsed="0.125146"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:32.034819" elapsed="0.000155"/>
</return>
<status status="PASS" start="2026-10-06T01:26:32.034734" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.034716" elapsed="0.000315"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.035347" elapsed="0.000024"/>
</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-10-06T01:26:32.035643" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:32.035835" 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="PASS" start="2026-10-06T01:26:31.908894" elapsed="0.127031"/>
</kw>
<msg time="2026-10-06T01:26:32.036008" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:32.036048" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.906858" elapsed="0.129225"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.036400" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:32.036152" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.036135" elapsed="0.000337"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:31.906716" elapsed="0.129777"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:26:31.634974" elapsed="0.401548"/>
</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-10-06T01:26:31.632849" elapsed="0.403734"/>
</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-10-06T01:26:31.630946" elapsed="0.405692"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:31.630525" elapsed="0.406187"/>
</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-10-06T01:26:31.629520" elapsed="0.407251"/>
</kw>
<kw name="Create Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:26:32.040950" level="FAIL">Variable '${original_candidate}' not found.</msg>
<arg>${original_candidate}</arg>
<doc>Add Port vx2 to bridge br01 in controller ${controller_index} and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:26:32.039631" elapsed="0.001355">Variable '${original_candidate}' not found.</status>
</kw>
<doc>Create Port in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:26:31.628972" elapsed="0.412164">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s1-s2-t34" name="Modify the destination IP of Port In Old Owner After Recover" line="165">
<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-10-06T01:26:32.042720" elapsed="0.000206"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:26:32.042449" elapsed="0.000527"/>
</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-10-06T01:26:32.043879" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:32.043793" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.043775" elapsed="0.000166"/>
</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-10-06T01:26:32.045833" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:32.045747" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.045729" elapsed="0.000166"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:26:32.046810" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:26:32.046458" elapsed="0.000383"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:32.047266" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:32.046991" elapsed="0.000299"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:26:32.047330" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:26:32.047456" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:26:32.046097" elapsed="0.001382"/>
</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-10-06T01:26:32.050040" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:32.049956" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.049939" elapsed="0.000164"/>
</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-10-06T01:26:32.051206" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:32.051123" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.051107" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:32.051635" level="INFO">${karaf_connection_index} = 222</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-10-06T01:26:32.051412" elapsed="0.000248"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:32.052023" 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-10-06T01:26:32.051850" elapsed="0.000197"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:32.085240" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:32.052606" elapsed="0.032830"/>
</kw>
<msg time="2026-10-06T01:26:32.085592" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:32.085632" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.052199" elapsed="0.033468"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:32.178288" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:32.086343" elapsed="0.092145"/>
</kw>
<msg time="2026-10-06T01:26:32.178653" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:32.178729" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.085911" elapsed="0.092856"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.179049" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:32.178840" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.178822" elapsed="0.000325"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:32.179673" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:32.179326" elapsed="0.000465"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.180053" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:32.179854" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.179838" elapsed="0.000310"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:32.180179" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:32.182658" elapsed="0.000521"/>
</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-10-06T01:26:32.184424" elapsed="0.000503"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:32.186314" elapsed="0.000314"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:32.180984" elapsed="0.005737"/>
</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-10-06T01:26:32.180450" elapsed="0.006395"/>
</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="PASS" start="2026-10-06T01:26:32.050865" elapsed="0.136057"/>
</kw>
<msg time="2026-10-06T01:26:32.187006" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:32.187046" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.050250" elapsed="0.136832"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:32.187238" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:26:32.187152" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.187135" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:26:32.187633" elapsed="0.000025"/>
</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-10-06T01:26:32.188039" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:32.188105" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:26:32.049644" elapsed="0.138547"/>
</kw>
<msg time="2026-10-06T01:26:32.188275" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:32.188316" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.047868" elapsed="0.140484"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.188696" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:32.188421" elapsed="0.000329"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.188405" elapsed="0.000369"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:32.047725" elapsed="0.141071"/>
</iter>
<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-10-06T01:26:32.191366" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:32.191279" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.191261" elapsed="0.000169"/>
</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-10-06T01:26:32.192537" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:32.192453" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.192436" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:32.193005" level="INFO">${karaf_connection_index} = 224</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-10-06T01:26:32.192777" elapsed="0.000253"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:32.193365" 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-10-06T01:26:32.193191" elapsed="0.000199"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:32.225708" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:32.193995" elapsed="0.031895"/>
</kw>
<msg time="2026-10-06T01:26:32.226050" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:32.226092" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.193546" elapsed="0.032582"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:32.316208" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:32.226751" elapsed="0.089646"/>
</kw>
<msg time="2026-10-06T01:26:32.316555" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:32.316597" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.226292" elapsed="0.090341"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.316942" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:32.316738" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.316719" elapsed="0.000319"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:32.317557" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:32.317216" elapsed="0.000432"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.317937" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:32.317739" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.317721" elapsed="0.000310"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:32.318062" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:32.320545" elapsed="0.000536"/>
</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-10-06T01:26:32.322325" elapsed="0.000494"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:32.324031" elapsed="0.000316"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:32.318858" elapsed="0.005556"/>
</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-10-06T01:26:32.318326" elapsed="0.006209"/>
</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="PASS" start="2026-10-06T01:26:32.192189" elapsed="0.132454"/>
</kw>
<msg time="2026-10-06T01:26:32.324773" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:32.324815" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.191579" elapsed="0.133272"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:32.325008" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:26:32.324923" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.324905" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.325402" elapsed="0.000024"/>
</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-10-06T01:26:32.325760" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:32.325827" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:26:32.190979" elapsed="0.134935"/>
</kw>
<msg time="2026-10-06T01:26:32.325999" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:32.326040" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.189047" elapsed="0.137029"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.326363" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:32.326147" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.326131" elapsed="0.000305"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:32.188908" elapsed="0.137549"/>
</iter>
<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-10-06T01:26:32.329244" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:32.329159" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.329141" elapsed="0.000168"/>
</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-10-06T01:26:32.330540" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:32.330456" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.330439" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:32.331005" level="INFO">${karaf_connection_index} = 226</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-10-06T01:26:32.330777" elapsed="0.000253"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:32.331365" 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-10-06T01:26:32.331192" elapsed="0.000197"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:32.364540" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:32.331990" elapsed="0.032781"/>
</kw>
<msg time="2026-10-06T01:26:32.364929" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:32.364971" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.331543" elapsed="0.033465"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:32.457596" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:32.365595" elapsed="0.092228"/>
</kw>
<msg time="2026-10-06T01:26:32.457982" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:32.458024" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.365173" elapsed="0.092887"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.458343" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:32.458131" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.458113" elapsed="0.000357"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:32.459023" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:32.458649" elapsed="0.000467"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.459374" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:32.459178" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.459161" elapsed="0.000307"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:32.459498" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:32.462016" elapsed="0.000473"/>
</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-10-06T01:26:32.463745" elapsed="0.000450"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:32.465569" elapsed="0.000338"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:32.460293" elapsed="0.005681"/>
</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-10-06T01:26:32.459800" elapsed="0.006291"/>
</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="PASS" start="2026-10-06T01:26:32.330195" elapsed="0.135972"/>
</kw>
<msg time="2026-10-06T01:26:32.466250" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:32.466291" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.329458" elapsed="0.136870"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:32.466482" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:26:32.466398" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.466380" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.466969" elapsed="0.000024"/>
</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-10-06T01:26:32.467270" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:32.467335" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:26:32.328864" elapsed="0.138557"/>
</kw>
<msg time="2026-10-06T01:26:32.467504" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:32.467544" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.327003" elapsed="0.140577"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.467894" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:32.467650" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.467633" elapsed="0.000333"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:32.326570" elapsed="0.141417"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:26:32.047534" elapsed="0.420481"/>
</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-10-06T01:26:32.045428" elapsed="0.422636"/>
</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-10-06T01:26:32.043506" elapsed="0.424608"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.043120" elapsed="0.425036"/>
</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-10-06T01:26:32.042108" elapsed="0.426097"/>
</kw>
<kw name="Modify the destination IP of Sample Port" owner="ClusterOvsdb">
<msg time="2026-10-06T01:26:32.471276" level="FAIL">Variable '${original_candidate}' not found.</msg>
<arg>${original_candidate}</arg>
<doc>Modify the dst ip of port vx2 in bridge br01 in controller ${controller_index}.</doc>
<status status="FAIL" start="2026-10-06T01:26:32.469928" elapsed="0.001383">Variable '${original_candidate}' not found.</status>
</kw>
<doc>Modify the dst ip of existing port in Owner.</doc>
<status status="FAIL" start="2026-10-06T01:26:32.041529" elapsed="0.429902">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s1-s2-t35" name="Verify Port Is Modified After Recover" line="169">
<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-10-06T01:26:32.472813" elapsed="0.000203"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:26:32.472540" elapsed="0.000528"/>
</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-10-06T01:26:32.473974" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:32.473887" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.473870" elapsed="0.000167"/>
</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-10-06T01:26:32.475926" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:32.475842" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.475825" elapsed="0.000164"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:26:32.476890" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:26:32.476538" elapsed="0.000377"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:32.477338" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:32.477066" elapsed="0.000296"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:26:32.477403" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:26:32.477529" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:26:32.476187" elapsed="0.001364"/>
</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-10-06T01:26:32.480970" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:32.480885" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.480867" elapsed="0.000168"/>
</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-10-06T01:26:32.482158" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:32.482074" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.482056" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:32.482592" level="INFO">${karaf_connection_index} = 222</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-10-06T01:26:32.482365" elapsed="0.000252"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:32.483044" 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-10-06T01:26:32.482864" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:32.516229" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:32.483640" elapsed="0.032767"/>
</kw>
<msg time="2026-10-06T01:26:32.516566" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:32.516609" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.483226" elapsed="0.033419"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:32.586190" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:32.517273" elapsed="0.069096"/>
</kw>
<msg time="2026-10-06T01:26:32.586528" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:32.586569" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.516849" elapsed="0.069755"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.586920" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:32.586709" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.586656" elapsed="0.000394"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:32.587568" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:32.587231" elapsed="0.000419"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.587940" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:32.587743" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.587726" elapsed="0.000309"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:32.588065" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:32.590547" elapsed="0.000523"/>
</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-10-06T01:26:32.592281" elapsed="0.000489"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:32.594134" elapsed="0.000308"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:32.588858" elapsed="0.005650"/>
</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-10-06T01:26:32.588333" elapsed="0.006291"/>
</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="PASS" start="2026-10-06T01:26:32.481809" elapsed="0.112921"/>
</kw>
<msg time="2026-10-06T01:26:32.594816" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:32.594856" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.481182" elapsed="0.113710"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:32.595045" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:26:32.594961" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.594944" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:26:32.595433" elapsed="0.000023"/>
</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-10-06T01:26:32.595835" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:32.595902" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:26:32.480563" elapsed="0.115425"/>
</kw>
<msg time="2026-10-06T01:26:32.596073" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:32.596113" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.477913" elapsed="0.118236"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.596433" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:32.596217" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.596201" elapsed="0.000304"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:32.477770" elapsed="0.118756"/>
</iter>
<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-10-06T01:26:32.599084" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:32.598999" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.598977" elapsed="0.000172"/>
</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-10-06T01:26:32.600465" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:32.600381" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.600364" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:32.600929" level="INFO">${karaf_connection_index} = 224</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-10-06T01:26:32.600673" elapsed="0.000281"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:32.601288" 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-10-06T01:26:32.601115" elapsed="0.000197"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:32.634263" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:32.601951" elapsed="0.032492"/>
</kw>
<msg time="2026-10-06T01:26:32.634603" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:32.634646" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.601499" elapsed="0.033213"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:32.706485" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:32.635312" elapsed="0.071353"/>
</kw>
<msg time="2026-10-06T01:26:32.706879" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:32.706922" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.634880" elapsed="0.072078"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.707235" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:32.707031" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.707013" elapsed="0.000321"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:32.707894" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:32.707513" elapsed="0.000463"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.708235" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:32.708039" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.708022" elapsed="0.000307"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:32.708360" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:32.710826" elapsed="0.000476"/>
</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-10-06T01:26:32.712522" elapsed="0.000485"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:32.714356" elapsed="0.000304"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:32.709147" elapsed="0.005610"/>
</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-10-06T01:26:32.708626" elapsed="0.006249"/>
</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="PASS" start="2026-10-06T01:26:32.600122" elapsed="0.114831"/>
</kw>
<msg time="2026-10-06T01:26:32.715035" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:32.715075" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.599298" elapsed="0.115813"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:32.715267" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:26:32.715182" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.715164" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.715656" elapsed="0.000081"/>
</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-10-06T01:26:32.716015" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:32.716079" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:26:32.598669" elapsed="0.117495"/>
</kw>
<msg time="2026-10-06T01:26:32.716285" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:32.716326" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.596817" elapsed="0.119545"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.716650" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:32.716433" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.716416" elapsed="0.000361"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:32.596633" elapsed="0.120166"/>
</iter>
<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-10-06T01:26:32.719389" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:32.719304" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.719287" elapsed="0.000166"/>
</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-10-06T01:26:32.720563" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:32.720479" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.720462" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:32.721031" level="INFO">${karaf_connection_index} = 226</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-10-06T01:26:32.720804" elapsed="0.000252"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:32.721392" 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-10-06T01:26:32.721216" elapsed="0.000201"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:32.767776" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:32.722020" elapsed="0.045946"/>
</kw>
<msg time="2026-10-06T01:26:32.768124" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:32.768167" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.721572" elapsed="0.046631"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:32.843407" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:32.768822" elapsed="0.074764"/>
</kw>
<msg time="2026-10-06T01:26:32.843781" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:32.843823" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.768367" elapsed="0.075492"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.844137" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:32.843931" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.843913" elapsed="0.000319"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:32.844785" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:32.844413" elapsed="0.000453"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.845126" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:32.844929" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.844912" elapsed="0.000309"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:32.845252" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:32.847770" elapsed="0.000480"/>
</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-10-06T01:26:32.849489" elapsed="0.000516"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:32.851421" elapsed="0.000347"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:32.846043" elapsed="0.005798"/>
</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-10-06T01:26:32.845518" elapsed="0.006443"/>
</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="PASS" start="2026-10-06T01:26:32.720215" elapsed="0.131823"/>
</kw>
<msg time="2026-10-06T01:26:32.852120" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:32.852160" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.719602" elapsed="0.132595"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:32.852352" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:26:32.852267" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.852250" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.852841" elapsed="0.000024"/>
</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-10-06T01:26:32.853147" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:32.853212" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:26:32.719009" elapsed="0.134290"/>
</kw>
<msg time="2026-10-06T01:26:32.853384" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:32.853425" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.717047" elapsed="0.136414"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:32.853778" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:32.853530" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:32.853514" elapsed="0.000337"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:32.716909" elapsed="0.136964"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:26:32.477599" elapsed="0.376302"/>
</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-10-06T01:26:32.475495" elapsed="0.378455"/>
</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-10-06T01:26:32.473599" elapsed="0.380401"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:32.473213" elapsed="0.380826"/>
</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-10-06T01:26:32.472202" elapsed="0.381884"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:26:32.856395" level="INFO">${port_dictionary} = {'br01': '6', 'vx2': '3', '10.0.0.19': '1'}</msg>
<var>${port_dictionary}</var>
<arg>br01=6</arg>
<arg>vx2=3</arg>
<arg>10.0.0.19=1</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:26:32.856065" elapsed="0.000356"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:26:32.860925" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:26:32.859591" elapsed="0.001369">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:26:33.870103" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:26:33.867199" elapsed="0.002986">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:26:34.879411" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:26:34.876483" elapsed="0.003009">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:26:35.889444" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:26:35.886397" elapsed="0.003148">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:26:36.899154" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:26:36.896130" elapsed="0.003117">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:26:37.908979" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:26:37.906043" elapsed="0.003016">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<msg time="2026-10-06T01:26:37.909259" level="FAIL">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</msg>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-10-06T01:26:32.856620" elapsed="5.052925">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:26:32.855657" elapsed="5.054196">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify port is modified in all instances.</doc>
<status status="FAIL" start="2026-10-06T01:26:32.471737" elapsed="5.438409">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s1-s2-t36" name="Delete Port In Old Owner After Recover" line="173">
<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-10-06T01:26:37.913539" elapsed="0.000578"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:26:37.912973" elapsed="0.001257"/>
</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-10-06T01:26:37.916424" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:37.916189" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:37.916142" elapsed="0.000433"/>
</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-10-06T01:26:37.921016" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:37.920825" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:37.920784" elapsed="0.000373"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:26:37.923270" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:26:37.922467" elapsed="0.000859"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:37.924330" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:37.923717" elapsed="0.000667"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:26:37.924475" elapsed="0.000065"/>
</return>
<msg time="2026-10-06T01:26:37.924818" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:26:37.921613" elapsed="0.003257"/>
</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-10-06T01:26:37.930598" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:37.930410" elapsed="0.000331"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:37.930370" elapsed="0.000421"/>
</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-10-06T01:26:37.933386" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:37.933197" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:37.933159" elapsed="0.000370"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:37.934428" level="INFO">${karaf_connection_index} = 222</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-10-06T01:26:37.933910" elapsed="0.000574"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:37.935313" 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-10-06T01:26:37.934909" elapsed="0.000555"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:37.972385" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:37.936882" elapsed="0.035765"/>
</kw>
<msg time="2026-10-06T01:26:37.972929" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:37.972987" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:37.935888" elapsed="0.037149"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:38.061016" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "[78CO "[A[78Cw
 "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:37.973896" elapsed="0.087469"/>
</kw>
<msg time="2026-10-06T01:26:38.061619" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:38.061700" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:37.973266" elapsed="0.088474"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.062192" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:38.061864" elapsed="0.000407"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.061825" elapsed="0.000473"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:38.062965" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "[78CO "[A[78Cw
 "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:38.062487" elapsed="0.000563"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.063308" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:38.063111" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.063094" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:38.063439" elapsed="0.000040"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:38.066232" elapsed="0.000521"/>
</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-10-06T01:26:38.068003" elapsed="0.000484"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:38.069915" elapsed="0.000314"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:38.064401" elapsed="0.005895"/>
</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-10-06T01:26:38.063853" elapsed="0.006560"/>
</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="PASS" start="2026-10-06T01:26:37.932553" elapsed="0.137939"/>
</kw>
<msg time="2026-10-06T01:26:38.070579" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:38.070621" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:37.931122" elapsed="0.139547"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:38.070845" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:26:38.070757" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.070739" elapsed="0.000185"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:26:38.071262" elapsed="0.000023"/>
</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-10-06T01:26:38.071572" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:38.071636" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:26:37.929763" elapsed="0.142070"/>
</kw>
<msg time="2026-10-06T01:26:38.071988" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:38.072028" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:37.925630" elapsed="0.146433"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.072356" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:38.072135" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.072119" elapsed="0.000308"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:37.925311" elapsed="0.147138"/>
</iter>
<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-10-06T01:26:38.075119" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:38.075035" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.075018" elapsed="0.000166"/>
</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-10-06T01:26:38.076275" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:38.076190" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.076173" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:38.076745" level="INFO">${karaf_connection_index} = 224</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-10-06T01:26:38.076481" elapsed="0.000289"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:38.077110" 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-10-06T01:26:38.076934" elapsed="0.000200"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:38.112593" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:38.077730" elapsed="0.035071"/>
</kw>
<msg time="2026-10-06T01:26:38.112958" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:38.113000" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.077287" elapsed="0.035749"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:38.189434" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "[78CO "[A[78Cw
 "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:38.113619" elapsed="0.075994"/>
</kw>
<msg time="2026-10-06T01:26:38.189804" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:38.189845" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.113199" elapsed="0.076682"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.190153" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:38.189952" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.189934" elapsed="0.000312"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:38.190796" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "[78CO "[A[78Cw
 "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:38.190425" elapsed="0.000455"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.191136" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:38.190941" elapsed="0.000263"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.190925" elapsed="0.000302"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:38.191257" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:38.193663" elapsed="0.000491"/>
</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-10-06T01:26:38.195362" elapsed="0.000477"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:38.197221" elapsed="0.000302"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:38.192039" elapsed="0.005550"/>
</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-10-06T01:26:38.191518" elapsed="0.006216"/>
</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="PASS" start="2026-10-06T01:26:38.075933" elapsed="0.121878"/>
</kw>
<msg time="2026-10-06T01:26:38.197893" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:38.197933" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.075332" elapsed="0.122637"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:38.198125" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:26:38.198040" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.198022" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.198514" elapsed="0.000023"/>
</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-10-06T01:26:38.198916" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:38.198983" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:26:38.074734" elapsed="0.124333"/>
</kw>
<msg time="2026-10-06T01:26:38.199150" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:38.199190" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.072745" elapsed="0.126479"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.199509" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:38.199293" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.199277" elapsed="0.000302"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:38.072575" elapsed="0.127025"/>
</iter>
<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-10-06T01:26:38.202156" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:38.202072" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.202055" elapsed="0.000165"/>
</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-10-06T01:26:38.203324" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:38.203233" elapsed="0.000133"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.203217" elapsed="0.000170"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:38.203792" level="INFO">${karaf_connection_index} = 226</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-10-06T01:26:38.203534" elapsed="0.000283"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:38.204150" 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-10-06T01:26:38.203977" elapsed="0.000196"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:38.229967" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:38.204767" elapsed="0.025374"/>
</kw>
<msg time="2026-10-06T01:26:38.230297" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:38.230339" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.204326" elapsed="0.026048"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:38.275744" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "[78CO "[A[78Cw
 "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:38.230985" elapsed="0.044941"/>
</kw>
<msg time="2026-10-06T01:26:38.276115" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:38.276157" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.230536" elapsed="0.045657"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.276463" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:38.276263" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.276246" elapsed="0.000310"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:38.277102" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "[78CO "[A[78Cw
 "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:38.276765" elapsed="0.000420"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.277443" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:38.277247" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.277230" elapsed="0.000307"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:38.277567" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:38.280038" elapsed="0.000473"/>
</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-10-06T01:26:38.281780" elapsed="0.000452"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:38.283417" elapsed="0.000561"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:38.278345" elapsed="0.005701"/>
</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-10-06T01:26:38.277858" elapsed="0.006304"/>
</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="PASS" start="2026-10-06T01:26:38.202978" elapsed="0.081260"/>
</kw>
<msg time="2026-10-06T01:26:38.284320" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:38.284359" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.202366" elapsed="0.082029"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:38.284548" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:26:38.284464" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.284447" elapsed="0.000177"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.284966" elapsed="0.000024"/>
</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-10-06T01:26:38.285262" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:38.285325" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:26:38.201780" elapsed="0.083630"/>
</kw>
<msg time="2026-10-06T01:26:38.285493" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:38.285533" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.199875" elapsed="0.085694"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.285957" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:38.285636" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.285621" elapsed="0.000408"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:38.199738" elapsed="0.086311"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:26:37.924987" elapsed="0.361090"/>
</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-10-06T01:26:37.920091" elapsed="0.366044"/>
</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-10-06T01:26:37.915532" elapsed="0.370655"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:37.914560" elapsed="0.371707"/>
</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-10-06T01:26:37.912133" elapsed="0.374188"/>
</kw>
<kw name="Delete Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:26:38.290406" level="FAIL">Variable '${original_candidate}' not found.</msg>
<arg>${original_candidate}</arg>
<doc>Delete port vx2 from bridge br01 in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:26:38.289125" elapsed="0.001316">Variable '${original_candidate}' not found.</status>
</kw>
<doc>Delete port in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:26:37.910904" elapsed="0.379681">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s1-s2-t37" name="Delete Bridge In Old Owner And Verify After Recover" line="177">
<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-10-06T01:26:38.292150" elapsed="0.000198"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:26:38.291905" elapsed="0.000493"/>
</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-10-06T01:26:38.293304" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:38.293218" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.293201" elapsed="0.000168"/>
</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-10-06T01:26:38.295268" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:38.295183" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.295166" elapsed="0.000164"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:26:38.296324" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:26:38.295997" elapsed="0.000353"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:38.296811" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:38.296502" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:26:38.296877" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:26:38.297001" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:26:38.295537" elapsed="0.001487"/>
</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-10-06T01:26:38.299539" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:38.299455" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.299437" elapsed="0.000165"/>
</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-10-06T01:26:38.300733" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:38.300610" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.300593" elapsed="0.000207"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:38.301166" level="INFO">${karaf_connection_index} = 222</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-10-06T01:26:38.300944" elapsed="0.000247"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:38.301522" 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-10-06T01:26:38.301352" elapsed="0.000195"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:38.336212" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:38.302145" elapsed="0.034249"/>
</kw>
<msg time="2026-10-06T01:26:38.336552" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:38.336594" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.301732" elapsed="0.034897"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:38.419059" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "[78Cd "[A[78C
 "O "w "n "e "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:38.337256" elapsed="0.081988"/>
</kw>
<msg time="2026-10-06T01:26:38.419402" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:38.419442" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.336831" elapsed="0.082678"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.419822" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:38.419583" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.419564" elapsed="0.000356"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:38.420440" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "[78Cd "[A[78C
 "O "w "n "e "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:38.420101" elapsed="0.000426"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.420815" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:38.420588" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.420572" elapsed="0.000339"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:38.420942" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:38.423404" elapsed="0.000514"/>
</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-10-06T01:26:38.425143" elapsed="0.000453"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:38.427021" elapsed="0.000309"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:38.421734" elapsed="0.005661"/>
</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-10-06T01:26:38.421206" elapsed="0.006305"/>
</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="PASS" start="2026-10-06T01:26:38.300354" elapsed="0.127234"/>
</kw>
<msg time="2026-10-06T01:26:38.427700" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:38.427742" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.299780" elapsed="0.127998"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:38.427934" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:26:38.427848" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.427831" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:26:38.428325" elapsed="0.000024"/>
</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-10-06T01:26:38.428624" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:38.428802" 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="PASS" start="2026-10-06T01:26:38.299165" elapsed="0.129726"/>
</kw>
<msg time="2026-10-06T01:26:38.428975" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:38.429014" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.297356" elapsed="0.131693"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.429338" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:38.429118" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.429102" elapsed="0.000308"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:38.297218" elapsed="0.132213"/>
</iter>
<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-10-06T01:26:38.431992" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:38.431907" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.431890" elapsed="0.000164"/>
</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-10-06T01:26:38.433181" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:38.433097" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.433080" elapsed="0.000196"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:38.433647" level="INFO">${karaf_connection_index} = 224</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-10-06T01:26:38.433421" elapsed="0.000305"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:38.434064" 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-10-06T01:26:38.433888" elapsed="0.000201"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:38.470071" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:38.434666" elapsed="0.035600"/>
</kw>
<msg time="2026-10-06T01:26:38.470425" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:38.470465" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.434241" elapsed="0.036259"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:38.556251" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "[78Cd "[A[78C
 "O "w "n "e "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:38.471124" elapsed="0.085962"/>
</kw>
<msg time="2026-10-06T01:26:38.557341" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:38.557385" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.470693" elapsed="0.086729"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.557917" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:38.557546" elapsed="0.000459"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.557506" elapsed="0.000528"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:38.559184" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "[78Cd "[A[78C
 "O "w "n "e "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:38.558221" elapsed="0.001053"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.559536" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:38.559338" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.559320" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:38.559691" elapsed="0.000045"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:38.562964" elapsed="0.000488"/>
</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-10-06T01:26:38.564733" elapsed="0.000489"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:38.566431" elapsed="0.000389"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:38.560587" elapsed="0.006301"/>
</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-10-06T01:26:38.560036" elapsed="0.006969"/>
</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="PASS" start="2026-10-06T01:26:38.432836" elapsed="0.134248"/>
</kw>
<msg time="2026-10-06T01:26:38.567176" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:38.567216" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.432201" elapsed="0.135051"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:38.567409" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:26:38.567323" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.567306" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.567860" elapsed="0.000024"/>
</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-10-06T01:26:38.568262" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:38.568328" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:26:38.431580" elapsed="0.136835"/>
</kw>
<msg time="2026-10-06T01:26:38.568503" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:38.568543" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.429703" elapsed="0.138876"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.568902" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:38.568662" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.568635" elapsed="0.000339"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:38.429537" elapsed="0.139461"/>
</iter>
<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-10-06T01:26:38.571638" elapsed="0.000026"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:38.571554" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.571537" elapsed="0.000222"/>
</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-10-06T01:26:38.573023" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:38.572937" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.572920" elapsed="0.000167"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:38.573471" level="INFO">${karaf_connection_index} = 226</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-10-06T01:26:38.573232" elapsed="0.000264"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:38.573879" 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-10-06T01:26:38.573697" elapsed="0.000207"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:38.605527" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:38.574468" elapsed="0.031271"/>
</kw>
<msg time="2026-10-06T01:26:38.605918" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:38.605961" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.574058" elapsed="0.031939"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:38.681147" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "[78Cd "[A[78C
 "O "w "n "e "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:38.606586" elapsed="0.074748"/>
</kw>
<msg time="2026-10-06T01:26:38.681497" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:38.681538" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.606163" elapsed="0.075412"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.681899" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:38.681662" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.681628" elapsed="0.000366"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:38.682514" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "[78Cd "[A[78C
 "O "w "n "e "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:38.682174" elapsed="0.000428"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.682889" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:38.682690" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.682659" elapsed="0.000322"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:38.683048" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:38.685507" elapsed="0.000515"/>
</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-10-06T01:26:38.687246" elapsed="0.000487"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:38.688916" elapsed="0.000314"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:38.683855" elapsed="0.005441"/>
</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-10-06T01:26:38.683330" elapsed="0.006085"/>
</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="PASS" start="2026-10-06T01:26:38.572481" elapsed="0.117011"/>
</kw>
<msg time="2026-10-06T01:26:38.689575" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:38.689615" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.571907" elapsed="0.117762"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:38.689847" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:26:38.689761" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.689738" elapsed="0.000186"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.690239" elapsed="0.000024"/>
</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-10-06T01:26:38.690539" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:38.690604" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:26:38.571251" elapsed="0.119465"/>
</kw>
<msg time="2026-10-06T01:26:38.690802" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:38.690842" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.569262" elapsed="0.121616"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.691163" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:38.690946" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.690930" elapsed="0.000304"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:38.569122" elapsed="0.122133"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:26:38.297076" elapsed="0.394207"/>
</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-10-06T01:26:38.294888" elapsed="0.396454"/>
</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-10-06T01:26:38.292965" elapsed="0.398433"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.292541" elapsed="0.398903"/>
</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-10-06T01:26:38.291540" elapsed="0.399957"/>
</kw>
<kw name="Delete Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:26:38.696967" level="FAIL">Variable '${original_candidate}' not found.</msg>
<arg>${original_candidate}</arg>
<doc>Delete bridge br01 in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:26:38.695373" elapsed="0.001630">Variable '${original_candidate}' not found.</status>
</kw>
<doc>Delete bridge in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:26:38.290986" elapsed="0.406154">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s1-s2-t38" name="Cleans Up Test Environment For Next Suite" line="181">
<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-10-06T01:26:38.698629" elapsed="0.000234"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:26:38.698385" elapsed="0.000530"/>
</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-10-06T01:26:38.699816" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:38.699730" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.699712" elapsed="0.000167"/>
</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-10-06T01:26:38.701828" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:38.701745" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.701727" elapsed="0.000163"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:26:38.702800" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:26:38.702441" elapsed="0.000385"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:38.703246" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:38.702975" elapsed="0.000295"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:26:38.703311" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:26:38.703436" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:26:38.702090" elapsed="0.001369"/>
</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-10-06T01:26:38.705994" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:38.705910" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.705892" elapsed="0.000165"/>
</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-10-06T01:26:38.707153" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:38.707069" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.707052" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:38.707580" level="INFO">${karaf_connection_index} = 222</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-10-06T01:26:38.707356" elapsed="0.000249"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:38.707968" 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-10-06T01:26:38.707794" elapsed="0.000197"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:38.740765" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:38.708556" elapsed="0.032384"/>
</kw>
<msg time="2026-10-06T01:26:38.741098" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:38.741139" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.708145" elapsed="0.033030"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:38.814088" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "l "e "a "n "s "[C "U "p "[C "T "e "s "t "[C "E "n "v "i "[78Cr "[A[78Co
 "n "m "e "n "t "[C "F "o "r "[C "N "e "x "t "[C "S "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:38.741795" elapsed="0.072473"/>
</kw>
<msg time="2026-10-06T01:26:38.814427" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:38.814467" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.741337" elapsed="0.073166"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.814814" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:38.814574" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.814556" elapsed="0.000352"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:38.815421" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "l "e "a "n "s "[C "U "p "[C "T "e "s "t "[C "E "n "v "i "[78Cr "[A[78Co
 "n "m "e "n "t "[C "F "o "r "[C "N "e "x "t "[C "S "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:38.815086" elapsed="0.000418"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.815787" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:38.815565" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.815549" elapsed="0.000332"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:38.815911" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:38.818424" elapsed="0.000509"/>
</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-10-06T01:26:38.820155" elapsed="0.000459"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:38.821827" elapsed="0.000309"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:38.816734" elapsed="0.005468"/>
</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-10-06T01:26:38.816174" elapsed="0.006147"/>
</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="PASS" start="2026-10-06T01:26:38.706811" elapsed="0.115587"/>
</kw>
<msg time="2026-10-06T01:26:38.822481" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:38.822520" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.706204" elapsed="0.116352"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:38.822739" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:26:38.822626" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.822609" elapsed="0.000209"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:26:38.823132" elapsed="0.000023"/>
</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-10-06T01:26:38.823427" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:38.823491" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:26:38.705592" elapsed="0.117984"/>
</kw>
<msg time="2026-10-06T01:26:38.823672" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:38.823727" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.703823" elapsed="0.119939"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.824044" elapsed="0.000018"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:38.823830" elapsed="0.000262"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.823815" elapsed="0.000299"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:38.703669" elapsed="0.120466"/>
</iter>
<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-10-06T01:26:38.826611" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:38.826527" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.826510" elapsed="0.000199"/>
</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-10-06T01:26:38.827824" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:38.827739" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.827722" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:38.828251" level="INFO">${karaf_connection_index} = 224</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-10-06T01:26:38.828025" elapsed="0.000250"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:38.828605" 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-10-06T01:26:38.828432" elapsed="0.000197"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:38.864569" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:38.829525" elapsed="0.035267"/>
</kw>
<msg time="2026-10-06T01:26:38.864949" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:38.864991" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.829113" elapsed="0.035912"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:38.941907" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "l "e "a "n "s "[C "U "p "[C "T "e "s "t "[C "E "n "v "i "[78Cr "[A[78Co
 "n "m "e "n "t "[C "F "o "r "[C "N "e "x "t "[C "S "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:38.865602" elapsed="0.076519"/>
</kw>
<msg time="2026-10-06T01:26:38.942278" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:38.942320" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.865186" elapsed="0.077185"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.942656" elapsed="0.000041"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:38.942442" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.942424" elapsed="0.000350"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:38.943284" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "l "e "a "n "s "[C "U "p "[C "T "e "s "t "[C "E "n "v "i "[78Cr "[A[78Co
 "n "m "e "n "t "[C "F "o "r "[C "N "e "x "t "[C "S "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:38.942950" elapsed="0.000417"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.943629" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:38.943429" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.943412" elapsed="0.000342"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:38.943785" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:38.946237" elapsed="0.000522"/>
</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-10-06T01:26:38.948064" elapsed="0.000456"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:38.949732" elapsed="0.000311"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:38.944532" elapsed="0.005577"/>
</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-10-06T01:26:38.944048" elapsed="0.006178"/>
</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="PASS" start="2026-10-06T01:26:38.827432" elapsed="0.122871"/>
</kw>
<msg time="2026-10-06T01:26:38.950401" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:38.950441" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.826859" elapsed="0.123618"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:38.950632" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-10-06T01:26:38.950547" elapsed="0.000241"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.950530" elapsed="0.000282"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.951126" elapsed="0.000024"/>
</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-10-06T01:26:38.951424" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:38.951489" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:26:38.826232" elapsed="0.125341"/>
</kw>
<msg time="2026-10-06T01:26:38.951670" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:38.951727" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.824376" elapsed="0.127386"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:38.952045" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:38.951831" elapsed="0.000262"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.951815" elapsed="0.000300"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:38.824242" elapsed="0.127894"/>
</iter>
<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-10-06T01:26:38.954603" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:38.954518" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.954501" elapsed="0.000403"/>
</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-10-06T01:26:38.956070" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:38.955984" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:38.955968" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:38.956497" level="INFO">${karaf_connection_index} = 226</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-10-06T01:26:38.956275" elapsed="0.000247"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:38.956880" 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-10-06T01:26:38.956706" elapsed="0.000198"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:38.989784" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:38.957463" elapsed="0.032499"/>
</kw>
<msg time="2026-10-06T01:26:38.990120" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:38.990161" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.957057" elapsed="0.033139"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:39.065855" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "l "e "a "n "s "[C "U "p "[C "T "e "s "t "[C "E "n "v "i "[78Cr "[A[78Co
 "n "m "e "n "t "[C "F "o "r "[C "N "e "x "t "[C "S "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:38.990812" elapsed="0.075242"/>
</kw>
<msg time="2026-10-06T01:26:39.066222" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:39.066264" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.990359" elapsed="0.075940"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:39.066569" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:39.066368" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:39.066350" elapsed="0.000339"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:39.067203" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "l "e "a "n "s "[C "U "p "[C "T "e "s "t "[C "E "n "v "i "[78Cr "[A[78Co
 "n "m "e "n "t "[C "F "o "r "[C "N "e "x "t "[C "S "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:39.066868" elapsed="0.000418"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:39.067541" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:39.067347" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:39.067330" elapsed="0.000304"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:39.067704" elapsed="0.000037"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:39.071235" elapsed="0.000601"/>
</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-10-06T01:26:39.073126" elapsed="0.000480"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:39.074969" elapsed="0.000316"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:39.068470" elapsed="0.006886"/>
</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-10-06T01:26:39.067983" elapsed="0.007493"/>
</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="PASS" start="2026-10-06T01:26:38.955726" elapsed="0.119842"/>
</kw>
<msg time="2026-10-06T01:26:39.075671" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:39.075730" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.955120" elapsed="0.120647"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:39.075937" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-10-06T01:26:39.075846" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:39.075825" elapsed="0.000202"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:39.076419" elapsed="0.000025"/>
</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-10-06T01:26:39.076754" elapsed="0.000029"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:39.076825" 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="PASS" start="2026-10-06T01:26:38.954228" elapsed="0.122686"/>
</kw>
<msg time="2026-10-06T01:26:39.077000" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:39.077041" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.952375" elapsed="0.124702"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:39.077368" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:39.077148" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:39.077131" elapsed="0.000308"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:38.952242" elapsed="0.125218"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:26:38.703511" elapsed="0.373981"/>
</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-10-06T01:26:38.701389" elapsed="0.376158"/>
</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-10-06T01:26:38.699443" elapsed="0.378157"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:38.699059" elapsed="0.378584"/>
</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-10-06T01:26:38.698037" elapsed="0.379700"/>
</kw>
<kw name="Configure Exit OVSDB Connection" owner="ClusterOvsdb">
<kw name="Clean OVSDB Test Environment" owner="OVSDB">
<kw name="Clean Mininet System" owner="Utils">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:39.080982" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:39.080734" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:39.080717" elapsed="0.000341"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:39.081387" 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-10-06T01:26:39.081486" 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-10-06T01:26:39.081248" elapsed="0.000263"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:39.082038" level="INFO">Attempting to execute command "sudo mn -c" on remote system "10.30.170.234" 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-10-06T01:26:39.081735" elapsed="0.000346"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:39.082561" level="INFO">${conn_id} = 367</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-10-06T01:26:39.082257" elapsed="0.000328"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:26:39.083463" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:26:39.083533" 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-10-06T01:26:39.083190" elapsed="0.000365"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:39.083835" elapsed="0.000288"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:26:39.084912" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:26:39.472404" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:26:22 UTC 2026

  System load:  0.09               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:26:24 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:26:39.084664" elapsed="0.387929"/>
</kw>
<msg time="2026-10-06T01:26:39.472689" 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-10-06T01:26:39.084284" elapsed="0.388487"/>
</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-10-06T01:26:39.082830" elapsed="0.390040"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:26:39.473341" level="INFO">Executing command 'sudo mn -c'.</msg>
<msg time="2026-10-06T01:26:40.659468" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:26:40.659940" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:26:40.660036" level="INFO">${stderr} = *** Removing excess controllers/ofprotocols/ofdatapaths/pings/noxes
killall controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec iv...</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-10-06T01:26:39.473126" elapsed="1.186964"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:40.660589" elapsed="0.000588"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:40.662384" level="INFO">*** Removing excess controllers/ofprotocols/ofdatapaths/pings/noxes
killall controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec ivs ryu-manager 2&gt; /dev/null
killall -9 controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec ivs ryu-manager 2&gt; /dev/null
pkill -9 -f "sudo mnexec"
*** Removing junk from /tmp
rm -f /tmp/vconn* /tmp/vlogs* /tmp/*.out /tmp/*.log
*** Removing old X11 tunnels
*** Removing excess kernel datapaths
ps ax | egrep -o 'dp[0-9]+' | sed 's/dp/nl:/'
***  Removing OVS datapaths
ovs-vsctl --timeout=1 list-br
ovs-vsctl --timeout=1 list-br
*** Removing all links of the pattern foo-ethX
ip link show | egrep -o '([-_.[:alnum:]]+-eth[[:digit:]]+)'
ip link show
*** Killing stale mininet node processes
pkill -9 -f mininet:
*** Shutting down stale tunnels
pkill -9 -f Tunnel=Ethernet
pkill -9 -f .ssh/mn
rm -f ~/.ssh/mn/*
*** Cleanup complete.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:40.661755" elapsed="0.000746"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:40.663010" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:40.662754" elapsed="0.000363"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:40.662618" elapsed="0.000548"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:26:40.663455" elapsed="0.000069"/>
</return>
<status status="PASS" start="2026-10-06T01:26:40.663275" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:40.663244" elapsed="0.000462"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:40.663786" elapsed="0.000030"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:40.665782" elapsed="0.000658"/>
</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-10-06T01:26:40.666954" elapsed="0.000768"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:40.668052" elapsed="0.000206"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:40.664465" elapsed="0.003902"/>
</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-10-06T01:26:39.080280" elapsed="1.588245"/>
</kw>
<msg time="2026-10-06T01:26:40.668659" 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-10-06T01:26:39.079517" elapsed="1.589287"/>
</kw>
<arg>${system}</arg>
<arg>sudo mn -c</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:26:39.079103" elapsed="1.589869"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:40.673154" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:40.672564" elapsed="0.000711"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:40.672525" elapsed="0.000800"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:40.674092" 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-10-06T01:26:40.674298" 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-10-06T01:26:40.673800" elapsed="0.000552"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:40.675462" level="INFO">Attempting to execute command "sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh" on remote system "10.30.170.234" 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-10-06T01:26:40.674815" elapsed="0.000966"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:40.676912" level="INFO">${conn_id} = 369</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-10-06T01:26:40.676183" elapsed="0.000784"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:26:40.678907" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:26:40.679064" 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-10-06T01:26:40.678292" elapsed="0.000821"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:40.679444" elapsed="0.000695"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:26:40.681932" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:26:41.076216" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:26:22 UTC 2026

  System load:  0.09               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:26:39 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:26:40.681362" elapsed="0.395043"/>
</kw>
<msg time="2026-10-06T01:26:41.076498" 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-10-06T01:26:40.680498" elapsed="0.396097"/>
</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-10-06T01:26:40.677398" elapsed="0.399347"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:26:41.077302" level="INFO">Executing command 'sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh'.</msg>
<msg time="2026-10-06T01:26:41.120265" level="INFO">Command exited with return code -1.</msg>
<msg time="2026-10-06T01:26:41.120501" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:26:41.120590" level="INFO">${stderr} = </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-10-06T01:26:41.077044" elapsed="0.043622"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:41.121059" elapsed="0.000931"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:41.123150" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:41.122501" elapsed="0.000737"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:41.123702" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:41.123407" elapsed="0.000407"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:41.123356" elapsed="0.000511"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:26:41.124158" elapsed="0.000053"/>
</return>
<status status="PASS" start="2026-10-06T01:26:41.123974" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:41.123943" elapsed="0.000383"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:41.124393" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:41.126057" elapsed="0.000690"/>
</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-10-06T01:26:41.127153" elapsed="0.000316"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:41.127840" elapsed="0.000205"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:41.125103" elapsed="0.003050"/>
</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-10-06T01:26:40.671559" elapsed="0.456747"/>
</kw>
<msg time="2026-10-06T01:26:41.128408" 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-10-06T01:26:40.670331" elapsed="0.458180"/>
</kw>
<arg>${system}</arg>
<arg>sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:26:40.669326" elapsed="0.459390"/>
</kw>
<arg>${tools_system}</arg>
<status status="PASS" start="2026-10-06T01:26:39.078664" elapsed="2.050278"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:41.133128" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:41.132547" elapsed="0.000699"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:41.132509" elapsed="0.000787"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:41.134055" 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-10-06T01:26:41.134264" 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-10-06T01:26:41.133772" elapsed="0.000547"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:41.135432" level="INFO">Attempting to execute command "sudo ovs-vsctl del-manager" on remote system "10.30.170.234" 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-10-06T01:26:41.134783" elapsed="0.000744"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:41.136834" level="INFO">${conn_id} = 371</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-10-06T01:26:41.136110" elapsed="0.000778"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:26:41.138774" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:26:41.138931" 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-10-06T01:26:41.138160" elapsed="0.000820"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:41.139308" elapsed="0.000692"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:26:41.141783" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:26:41.546071" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:26:22 UTC 2026

  System load:  0.09               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:26:40 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:26:41.141228" elapsed="0.405034"/>
</kw>
<msg time="2026-10-06T01:26:41.546364" 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-10-06T01:26:41.140364" elapsed="0.406102"/>
</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-10-06T01:26:41.137319" elapsed="0.409279"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:26:41.547267" level="INFO">Executing command 'sudo ovs-vsctl del-manager'.</msg>
<msg time="2026-10-06T01:26:41.579768" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:26:41.579934" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:26:41.579991" level="INFO">${stderr} = </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-10-06T01:26:41.546963" elapsed="0.033058"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:41.580244" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:41.581352" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:41.580929" elapsed="0.000477"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:41.581777" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:41.581534" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:41.581491" elapsed="0.000425"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:26:41.582112" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-10-06T01:26:41.581992" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:41.581971" elapsed="0.000253"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:41.582267" elapsed="0.000018"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:41.583457" elapsed="0.000504"/>
</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-10-06T01:26:41.584221" elapsed="0.000303"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:41.584797" elapsed="0.000141"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:41.582790" elapsed="0.002216"/>
</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-10-06T01:26:41.131545" elapsed="0.453560"/>
</kw>
<msg time="2026-10-06T01:26:41.585174" 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-10-06T01:26:41.130325" elapsed="0.454918"/>
</kw>
<arg>${tools_system}</arg>
<arg>sudo ovs-vsctl del-manager</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:26:41.129330" elapsed="0.456020"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:41.588020" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:41.587661" elapsed="0.000434"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:41.587617" elapsed="0.000510"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:41.588603" 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-10-06T01:26:41.588796" 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-10-06T01:26:41.588414" elapsed="0.000417"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:41.589493" level="INFO">Attempting to execute command "sudo /usr/share/openvswitch/scripts/ovs-ctl stop" on remote system "10.30.170.234" 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-10-06T01:26:41.589092" elapsed="0.000462"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:41.590270" level="INFO">${conn_id} = 373</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-10-06T01:26:41.589846" elapsed="0.000458"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:26:41.591486" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:26:41.591581" 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-10-06T01:26:41.591116" elapsed="0.000496"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:41.591856" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:26:41.593358" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:26:41.976712" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:26:22 UTC 2026

  System load:  0.09               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:26:41 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:26:41.593033" elapsed="0.383875"/>
</kw>
<msg time="2026-10-06T01:26:41.977006" 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-10-06T01:26:41.592479" elapsed="0.384631"/>
</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-10-06T01:26:41.590575" elapsed="0.386665"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:26:41.977903" level="INFO">Executing command 'sudo /usr/share/openvswitch/scripts/ovs-ctl stop'.</msg>
<msg time="2026-10-06T01:26:42.243424" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:26:42.243794" level="INFO">${stdout} =  * Exiting ovs-vswitchd (4184)
 * Exiting ovsdb-server (4167)</msg>
<msg time="2026-10-06T01:26:42.243895" level="INFO">${stderr} = </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-10-06T01:26:41.977569" elapsed="0.266376"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:42.244466" elapsed="0.000558"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:42.246191" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:42.245519" elapsed="0.000760"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:42.246728" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:42.246439" elapsed="0.000395"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:42.246390" elapsed="0.000494"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:26:42.247171" elapsed="0.000064"/>
</return>
<status status="PASS" start="2026-10-06T01:26:42.246990" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:42.246960" elapsed="0.000390"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:42.247417" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:42.249119" elapsed="0.000739"/>
</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-10-06T01:26:42.250267" elapsed="0.000312"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:42.250944" elapsed="0.000198"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:42.248127" elapsed="0.003122"/>
</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-10-06T01:26:41.587046" elapsed="0.664356"/>
</kw>
<msg time="2026-10-06T01:26:42.251513" 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-10-06T01:26:41.586249" elapsed="0.665373"/>
</kw>
<arg>${tools_system}</arg>
<arg>sudo /usr/share/openvswitch/scripts/ovs-ctl stop</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:26:41.585603" elapsed="0.666232"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:42.256025" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:42.255414" elapsed="0.000730"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:42.255376" elapsed="0.000818"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:42.256942" 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-10-06T01:26:42.257147" 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-10-06T01:26:42.256611" elapsed="0.000590"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:42.258302" level="INFO">Attempting to execute command "sudo rm -rf /etc/openvswitch/conf.db" on remote system "10.30.170.234" 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-10-06T01:26:42.257613" elapsed="0.000783"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:42.259502" level="INFO">${conn_id} = 375</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-10-06T01:26:42.258837" elapsed="0.000719"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:26:42.261483" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:26:42.261658" 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-10-06T01:26:42.260917" elapsed="0.000819"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:42.262067" elapsed="0.000680"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:26:42.264473" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:26:42.664000" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:26:22 UTC 2026

  System load:  0.09               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:26:41 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:26:42.263965" elapsed="0.400146"/>
</kw>
<msg time="2026-10-06T01:26:42.664165" 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-10-06T01:26:42.263104" elapsed="0.401112"/>
</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-10-06T01:26:42.260036" elapsed="0.404253"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:26:42.664649" level="INFO">Executing command 'sudo rm -rf /etc/openvswitch/conf.db'.</msg>
<msg time="2026-10-06T01:26:42.687632" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:26:42.687788" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:26:42.687848" level="INFO">${stderr} = </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-10-06T01:26:42.664485" elapsed="0.023392"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:42.688088" elapsed="0.000235"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:42.688963" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:42.688604" elapsed="0.000412"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:42.689926" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:42.689105" elapsed="0.000886"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:42.689079" elapsed="0.000944"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:26:42.690204" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-10-06T01:26:42.690091" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:42.690071" elapsed="0.000241"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:42.690354" elapsed="0.000017"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:42.691349" elapsed="0.000470"/>
</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-10-06T01:26:42.692074" elapsed="0.000190"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:42.692456" elapsed="0.000122"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:42.690794" elapsed="0.001867"/>
</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-10-06T01:26:42.254426" elapsed="0.438350"/>
</kw>
<msg time="2026-10-06T01:26:42.692841" 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-10-06T01:26:42.253217" elapsed="0.439686"/>
</kw>
<arg>${tools_system}</arg>
<arg>sudo rm -rf /etc/openvswitch/conf.db</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:26:42.252228" elapsed="0.440771"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:42.695529" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:42.695202" elapsed="0.000401"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:42.695177" elapsed="0.000475"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:42.696109" 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-10-06T01:26:42.696236" 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-10-06T01:26:42.695937" elapsed="0.000333"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:42.696972" level="INFO">Attempting to execute command "sudo /usr/share/openvswitch/scripts/ovs-ctl start" on remote system "10.30.170.234" 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-10-06T01:26:42.696528" elapsed="0.000503"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:42.697718" level="INFO">${conn_id} = 377</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-10-06T01:26:42.697275" elapsed="0.000478"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:26:42.698898" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:26:42.698993" 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-10-06T01:26:42.698511" elapsed="0.000513"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:42.699285" elapsed="0.000443"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:26:42.701036" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:26:43.078995" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:26:22 UTC 2026

  System load:  0.09               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:26:42 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:26:42.700708" elapsed="0.378446"/>
</kw>
<msg time="2026-10-06T01:26:43.079239" 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-10-06T01:26:42.699959" elapsed="0.379368"/>
</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-10-06T01:26:42.698019" elapsed="0.381424"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:26:43.080045" level="INFO">Executing command 'sudo /usr/share/openvswitch/scripts/ovs-ctl start'.</msg>
<msg time="2026-10-06T01:26:43.224272" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:26:43.224513" level="INFO">${stdout} =  * /etc/openvswitch/conf.db does not exist
 * Creating empty database /etc/openvswitch/conf.db
 * Starting ovsdb-server
 * system ID not configured, please use --system-id
 * Configuring Open vSwitch ...</msg>
<msg time="2026-10-06T01:26:43.224603" level="INFO">${stderr} = </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-10-06T01:26:43.079779" elapsed="0.144932"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:43.225074" elapsed="0.000406"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.226653" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:43.226035" elapsed="0.000734"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:43.227186" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:43.226940" elapsed="0.000351"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:43.226887" elapsed="0.000454"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:26:43.227654" elapsed="0.000083"/>
</return>
<status status="PASS" start="2026-10-06T01:26:43.227448" elapsed="0.000359"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:43.227418" elapsed="0.000438"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:43.227923" elapsed="0.000030"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:43.229559" elapsed="0.000703"/>
</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-10-06T01:26:43.230720" elapsed="0.000323"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:43.231351" elapsed="0.000190"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:43.228592" elapsed="0.003075"/>
</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-10-06T01:26:42.694580" elapsed="0.537270"/>
</kw>
<msg time="2026-10-06T01:26:43.231957" 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-10-06T01:26:42.693858" elapsed="0.538200"/>
</kw>
<arg>${tools_system}</arg>
<arg>sudo /usr/share/openvswitch/scripts/ovs-ctl start</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:26:42.693241" elapsed="0.538973"/>
</kw>
<arg>${TOOLS_SYSTEM_IP}</arg>
<doc>General Use Keyword attempting to sanitize test environment for OVSDB related
tests. Not every step will always be neccessary, but should not cause any problems for
any new ovsdb test suites.</doc>
<status status="PASS" start="2026-10-06T01:26:39.078312" elapsed="4.154012"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.233464" level="INFO">${dictionary} = {'ovsdb://uuid': '0'}</msg>
<var>${dictionary}</var>
<arg>ovsdb://uuid=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:26:43.232804" elapsed="0.000715"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.241972" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:26:43.241174" elapsed="0.000856"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.243028" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:43.242363" elapsed="0.000717"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:26:43.243171" elapsed="0.000061"/>
</return>
<msg time="2026-10-06T01:26:43.243455" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:26:43.240223" elapsed="0.003281"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.249947" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:26:43.249280" elapsed="0.000723"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:26:43.250098" elapsed="0.000059"/>
</return>
<msg time="2026-10-06T01:26:43.250369" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:26:43.248496" elapsed="0.001923"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.253097" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:43.252550" elapsed="0.000639"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.254141" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:43.253604" elapsed="0.000624"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:43.267924" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cg2a0p4c5w8b1faz1p1goe6uq1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:26:43.268205" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '144'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:26:43.268433" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:26:43.254918" elapsed="0.013567"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:43.254363" elapsed="0.014206"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:43.269024" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:43.268644" elapsed="0.000510"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:43.254325" elapsed="0.014875"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.272152" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:43.271370" elapsed="0.000882"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:43.270835" elapsed="0.001488"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:43.270795" elapsed="0.001580"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.273717" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:43.273067" elapsed="0.000746"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:43.272490" elapsed="0.001394"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:43.272456" elapsed="0.001479"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.275165" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:43.274321" elapsed="0.000901"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:43.275958" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:43.275440" elapsed="0.000638"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.277127" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:43.276479" elapsed="0.000702"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:43.276130" elapsed="0.001125"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:43.275358" elapsed="0.001943"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.278476" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:43.277722" elapsed="0.000809"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:43.279263" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:43.278802" elapsed="0.000578"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.280428" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:43.279840" elapsed="0.000794"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:43.279430" elapsed="0.001311"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:43.278761" elapsed="0.002033"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:43.281109" elapsed="0.000712"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:26:43.282753" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:43.282173" elapsed="0.000637"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:26:43.283141" elapsed="0.000473"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:26:43.269965" elapsed="0.013829"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:26:43.284117" elapsed="0.000056"/>
</return>
<status status="PASS" start="2026-10-06T01:26:43.283933" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:43.283895" elapsed="0.000397"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:43.284601" elapsed="0.000069"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:26:43.284806" elapsed="0.000033"/>
</return>
<msg time="2026-10-06T01:26:43.285289" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:26:43.251143" elapsed="0.034207"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:26:43.285452" elapsed="0.000056"/>
</return>
<msg time="2026-10-06T01:26:43.285858" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:26:43.247521" elapsed="0.038398"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.291461" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:26:43.290568" elapsed="0.001035"/>
</kw>
<var name="${item}">ovsdb://uuid</var>
<status status="PASS" start="2026-10-06T01:26:43.287172" elapsed="0.004572"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:26:43.286942" elapsed="0.004877"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:26:43.286378" elapsed="0.005554"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:43.243985" elapsed="0.048016"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.297947" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:43.297295" elapsed="0.000709"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:26:43.298097" elapsed="0.000058"/>
</return>
<msg time="2026-10-06T01:26:43.298369" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:26:43.296516" elapsed="0.001903"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.301087" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:43.300541" elapsed="0.000638"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.302134" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:43.301595" elapsed="0.000628"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:43.318137" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01q8j2dkwra6wr3cwxwejtlypa1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:26:43.318276" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:26:43.318447" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:26:43.302844" elapsed="0.015637"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:43.302358" elapsed="0.016177"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:43.318829" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:43.318569" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:43.302320" elapsed="0.016622"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.320713" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:43.320217" elapsed="0.000558"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:43.319888" elapsed="0.000938"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:43.319863" elapsed="0.000995"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.321648" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:43.321258" elapsed="0.000470"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:43.320931" elapsed="0.000842"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:43.320909" elapsed="0.000896"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.322521" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:43.322044" elapsed="0.000513"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:43.322972" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:43.322665" elapsed="0.000382"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.323703" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:43.323296" elapsed="0.000443"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:43.323078" elapsed="0.000707"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:43.322642" elapsed="0.001172"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.324520" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:43.324051" elapsed="0.000503"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:43.324972" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:43.324669" elapsed="0.000375"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.325673" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:43.325291" elapsed="0.000437"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:43.325075" elapsed="0.000700"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:43.324644" elapsed="0.001159"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:43.325997" elapsed="0.000405"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:26:43.326962" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:43.326636" elapsed="0.000361"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:26:43.327202" elapsed="0.000287"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:26:43.319381" elapsed="0.008186"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:26:43.327808" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:26:43.327673" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:43.327649" elapsed="0.000267"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:43.328109" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:26:43.328197" elapsed="0.000019"/>
</return>
<msg time="2026-10-06T01:26:43.328490" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:26:43.299138" elapsed="0.029387"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:26:43.328589" elapsed="0.000059"/>
</return>
<msg time="2026-10-06T01:26:43.328804" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:26:43.295393" elapsed="0.033445"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.330522" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:26:43.330094" elapsed="0.000512"/>
</kw>
<var name="${item}">ovsdb://uuid</var>
<status status="PASS" start="2026-10-06T01:26:43.329643" elapsed="0.001052"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:26:43.329480" elapsed="0.001257"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:26:43.329169" elapsed="0.001635"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:43.292185" elapsed="0.038663"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.334359" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:43.333984" elapsed="0.000411"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:26:43.334455" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:26:43.334645" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:26:43.333504" elapsed="0.001192"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.336311" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:43.336006" elapsed="0.000362"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.336978" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:43.336653" elapsed="0.000381"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:43.352556" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01iz04a3k2d6itg7w98bvdcezy1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:26:43.352741" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:26:43.352880" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:26:43.337432" elapsed="0.015484"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:43.337120" elapsed="0.015850"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:43.353212" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:43.353003" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:43.337096" elapsed="0.016225"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.355144" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:43.354693" elapsed="0.000510"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:43.354325" elapsed="0.000922"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:43.354301" elapsed="0.000977"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.356084" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:43.355711" elapsed="0.000429"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:43.355349" elapsed="0.000835"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:43.355327" elapsed="0.000887"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.356954" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:43.356446" elapsed="0.000543"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:43.357359" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:43.357077" elapsed="0.000356"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.358089" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:43.357721" elapsed="0.000402"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:43.357464" elapsed="0.000704"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:43.357055" elapsed="0.001142"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.358929" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:43.358429" elapsed="0.000535"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:43.359328" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:43.359051" elapsed="0.000349"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.360099" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:43.359732" elapsed="0.000402"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:43.359474" elapsed="0.000706"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:43.359028" elapsed="0.001181"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:43.360403" elapsed="0.000464"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:26:43.361385" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:26:43.361083" elapsed="0.000335"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:26:43.361642" elapsed="0.000310"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:26:43.353858" elapsed="0.008173"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:26:43.362230" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:26:43.362118" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:43.362095" elapsed="0.000243"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:43.362530" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:26:43.362635" elapsed="0.000021"/>
</return>
<msg time="2026-10-06T01:26:43.362955" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:26:43.335109" elapsed="0.027881"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:26:43.363053" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:26:43.363221" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:26:43.332931" elapsed="0.030323"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.364918" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:26:43.364455" elapsed="0.000547"/>
</kw>
<var name="${item}">ovsdb://uuid</var>
<status status="PASS" start="2026-10-06T01:26:43.364027" elapsed="0.001027"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:26:43.363883" elapsed="0.001210"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:26:43.363534" elapsed="0.001627"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:43.330960" elapsed="0.034245"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:26:43.243712" elapsed="0.121529"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary {'ovsdb://uuid': '0'}.</doc>
<status status="PASS" start="2026-10-06T01:26:43.239110" elapsed="0.126195"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:26:43.234077" elapsed="0.131294"/>
</kw>
<doc>Cleans up test environment, close existing sessions.</doc>
<status status="PASS" start="2026-10-06T01:26:39.077935" elapsed="4.287515"/>
</kw>
<doc>Cleans up test environment, close existing sessions in teardown.</doc>
<status status="PASS" start="2026-10-06T01:26:38.697491" elapsed="4.668099"/>
</test>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<msg time="2026-10-06T01:26:43.375854" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects </doc>
<status status="PASS" start="2026-10-06T01:26:43.374573" elapsed="0.001961"/>
</kw>
<doc>Test suite for Ovsdb Southbound Cluster - Candidate failover and recover</doc>
<status status="FAIL" start="2026-10-06T01:23:55.320402" elapsed="168.056309"/>
</suite>
<status status="FAIL" start="2026-10-06T01:20:50.597209" elapsed="352.782889"/>
</suite>
<suite id="s1-s2" name="Southbound Cluster" source="/w/workspace/ovsdb-csit-3node-upstream-clustering-only-chromium/test/csit/suites/ovsdb/Southbound_Cluster">
<suite id="s1-s2-s1" name="Ovsdb Southbound Cluster" source="/w/workspace/ovsdb-csit-3node-upstream-clustering-only-chromium/test/csit/suites/ovsdb/Southbound_Cluster/010__Ovsdb_Southbound_Cluster.robot">
<kw name="Suite Setup" 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-10-06T01:26:43.411110" level="INFO">${SuiteFastFail} = False</msg>
<arg>${SuiteFastFail}</arg>
<arg>False</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-10-06T01:26:43.409557" elapsed="0.001605"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-10-06T01:26:43.409315" elapsed="0.001913"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.413479" 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-10-06T01:26:43.412223" elapsed="0.001283"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-10-06T01:26:43.413798" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:43.413696" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:43.413660" elapsed="0.000204"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.414367" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-10-06T01:26:43.414038" elapsed="0.000369"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.414878" level="INFO">${cluster_size} = 3</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-10-06T01:26:43.414565" elapsed="0.000337"/>
</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-10-06T01:26:43.415402" elapsed="0.000326"/>
</kw>
<msg time="2026-10-06T01:26:43.415818" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:43.415862" level="INFO">${possibly_int_of_members} = 3</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:43.415063" elapsed="0.000821"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.416378" level="INFO">${int_of_members} = 3</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-10-06T01:26:43.416058" elapsed="0.000345"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.417273" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:43.417027" elapsed="0.000271"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.417710" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:43.417438" elapsed="0.000298"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.418174" 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-10-06T01:26:43.417908" elapsed="0.000292"/>
</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-10-06T01:26:43.419245" elapsed="0.000167"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.419872" level="INFO">${member_ip} = 10.30.171.109</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:43.419566" elapsed="0.000330"/>
</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-10-06T01:26:43.420060" elapsed="0.000169"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.420955" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:26:43.420691" elapsed="0.000289"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:26:43.421020" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:26:43.421156" 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-10-06T01:26:43.420403" elapsed="0.000777"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:43.421695" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.171.109:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b84047c5d0&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-10-06T01:26:43.421347" elapsed="0.000507"/>
</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-10-06T01:26:43.422012" elapsed="0.000147"/>
</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-10-06T01:26:43.418800" elapsed="0.003412"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:43.418446" elapsed="0.003804"/>
</iter>
<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-10-06T01:26:43.422946" elapsed="0.000144"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.423515" level="INFO">${member_ip} = 10.30.171.171</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:43.423240" elapsed="0.000299"/>
</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-10-06T01:26:43.423727" elapsed="0.000164"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.424576" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:43.424316" elapsed="0.000284"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:26:43.424657" elapsed="0.000043"/>
</return>
<msg time="2026-10-06T01:26:43.424838" level="INFO">${session_alias} = ClusterManagement__session_2</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-10-06T01:26:43.424058" elapsed="0.000803"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:43.425326" level="INFO">Creating Session using : alias=ClusterManagement__session_2, url=http://10.30.171.171:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b840eaba90&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-10-06T01:26:43.425026" elapsed="0.000402"/>
</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-10-06T01:26:43.425584" elapsed="0.000177"/>
</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-10-06T01:26:43.422486" elapsed="0.003328"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:43.422327" elapsed="0.003525"/>
</iter>
<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-10-06T01:26:43.426522" elapsed="0.000171"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.427121" level="INFO">${member_ip} = 10.30.170.97</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:43.426847" elapsed="0.000299"/>
</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-10-06T01:26:43.427304" elapsed="0.000162"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.428191" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:43.427927" elapsed="0.000289"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:26:43.428256" elapsed="0.000028"/>
</return>
<msg time="2026-10-06T01:26:43.428531" level="INFO">${session_alias} = ClusterManagement__session_3</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-10-06T01:26:43.427653" elapsed="0.000902"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:43.429101" level="INFO">Creating Session using : alias=ClusterManagement__session_3, url=http://10.30.170.97:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b84059ca10&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-10-06T01:26:43.428804" elapsed="0.000394"/>
</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-10-06T01:26:43.429354" elapsed="0.000146"/>
</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-10-06T01:26:43.426087" elapsed="0.003465"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:43.425927" elapsed="0.003662"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-10-06T01:26:43.418255" elapsed="0.011374"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.430178" level="INFO">${ClusterManagement__member_index_list} = [1, 2, 3]</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-10-06T01:26:43.429826" elapsed="0.000392"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.430772" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.171.109', 2: '10.30.171.171', 3: '10.30.170.97'}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-10-06T01:26:43.430397" elapsed="0.000415"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.431328" level="INFO">${ClusterManagement__session_list} = ['ClusterManagement__session_1', 'ClusterManagement__session_2', 'ClusterManagement__session_3']</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-10-06T01:26:43.430989" elapsed="0.000378"/>
</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-10-06T01:26:43.416643" elapsed="0.014776"/>
</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-10-06T01:26:43.411916" elapsed="0.019551"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-10-06T01:26:43.431614" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:43.431524" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:43.431508" elapsed="0.000204"/>
</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-10-06T01:26:43.432897" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:26:43.432538" elapsed="0.000384"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.433383" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:43.433114" elapsed="0.000293"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:26:43.433447" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:26:43.433573" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:26:43.432245" elapsed="0.001352"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:43.434445" level="INFO">${member_ip} = 10.30.171.109</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-10-06T01:26:43.434238" elapsed="0.000232"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:43.435209" 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-10-06T01:26:43.435300" 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-10-06T01:26:43.435051" elapsed="0.000273"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:43.438469" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:43.437829" elapsed="0.000741"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:43.437788" elapsed="0.000870"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:43.439370" 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-10-06T01:26:43.439668" 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-10-06T01:26:43.438987" elapsed="0.000824"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.440733" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.171.109" 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-10-06T01:26:43.440123" elapsed="0.000765"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:43.442139" level="INFO">${conn_id} = 379</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-10-06T01:26:43.441178" elapsed="0.001078"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:26:43.443584" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:26:43.443671" 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-10-06T01:26:43.443333" elapsed="0.000413"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:43.443939" elapsed="0.000285"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:26:43.445061" level="INFO">Logging into '10.30.171.109:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:26:44.060235" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-194-generic x86_64)

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

 System information as of Tue Oct  6 01:26:43 UTC 2026

  System load:  0.16               Processes:             122
  Usage of /:   14.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.109
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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

New release '24.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:23:55 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:26:43.444822" elapsed="0.615492"/>
</kw>
<msg time="2026-10-06T01:26:44.060371" 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-10-06T01:26:43.444428" elapsed="0.616005"/>
</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-10-06T01:26:43.442643" elapsed="0.617983"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:26:44.061424" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-10-06T01:26:44.074574" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-10-06T01:26:44.074902" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:26:44.075084" 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-10-06T01:26:44.060998" elapsed="0.014256"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:44.075570" elapsed="0.000828"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:44.078187" 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-10-06T01:26:44.077369" elapsed="0.001067"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:44.079114" elapsed="0.000042"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:44.078707" elapsed="0.000515"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:44.078600" elapsed="0.000740"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:26:44.080244" elapsed="0.000091"/>
</return>
<status status="PASS" start="2026-10-06T01:26:44.079539" elapsed="0.000863"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:44.079480" elapsed="0.001043"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:44.080690" elapsed="0.000023"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:44.082556" elapsed="0.000662"/>
</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-10-06T01:26:44.083642" elapsed="0.000317"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:44.084302" elapsed="0.000219"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:44.081458" elapsed="0.003187"/>
</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-10-06T01:26:43.436982" elapsed="0.648056"/>
</kw>
<msg time="2026-10-06T01:26:44.085189" 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-10-06T01:26:43.436342" elapsed="0.648915"/>
</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-10-06T01:26:43.435958" elapsed="0.649397"/>
</kw>
<msg time="2026-10-06T01:26:44.085404" 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-10-06T01:26:43.435475" elapsed="0.649986"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:44.086340" elapsed="0.000492"/>
</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-10-06T01:26:44.087087" elapsed="0.000185"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:44.087464" elapsed="0.000121"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:44.085879" elapsed="0.001790"/>
</kw>
<msg time="2026-10-06T01:26:44.087801" 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-10-06T01:26:43.434694" elapsed="0.653139"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:44.088424" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:44.088118" elapsed="0.000359"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-10-06T01:26:44.088529" elapsed="0.000036"/>
</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-10-06T01:26:43.433933" elapsed="0.654797"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:43.433775" elapsed="0.655013"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:44.090131" level="INFO">${member_ip} = 10.30.171.171</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-10-06T01:26:44.089549" elapsed="0.000617"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:44.091137" 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-10-06T01:26:44.091260" 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-10-06T01:26:44.090970" elapsed="0.000324"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:44.095916" elapsed="0.000067"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:44.094934" elapsed="0.001131"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:44.094872" elapsed="0.001309"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:44.097272" 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-10-06T01:26:44.097714" 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-10-06T01:26:44.096653" elapsed="0.001250"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:44.099449" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.171.171" 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-10-06T01:26:44.098357" elapsed="0.001364"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:44.101263" level="INFO">${conn_id} = 382</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-10-06T01:26:44.100158" elapsed="0.001284"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:26:44.103564" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:26:44.103707" 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-10-06T01:26:44.103218" elapsed="0.000523"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:44.104023" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:26:44.105556" level="INFO">Logging into '10.30.171.171:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:26:44.719204" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-194-generic x86_64)

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

 System information as of Tue Oct  6 01:26:44 UTC 2026

  System load:  0.45               Processes:             119
  Usage of /:   14.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.171
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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

New release '24.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:23:56 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-0-builder-1 ~]&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-10-06T01:26:44.105323" elapsed="0.614022"/>
</kw>
<msg time="2026-10-06T01:26:44.719429" 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-10-06T01:26:44.104955" elapsed="0.614553"/>
</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-10-06T01:26:44.102030" elapsed="0.617726"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:26:44.720624" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-10-06T01:26:44.732989" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-10-06T01:26:44.733257" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:26:44.733416" 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-10-06T01:26:44.720157" elapsed="0.013375"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:44.733846" elapsed="0.000493"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:44.735581" 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-10-06T01:26:44.735029" elapsed="0.000812"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:44.736444" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:44.736059" elapsed="0.000490"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:44.735994" elapsed="0.000755"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:26:44.737282" elapsed="0.000084"/>
</return>
<status status="PASS" start="2026-10-06T01:26:44.736937" elapsed="0.000492"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:44.736883" elapsed="0.000653"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:44.737827" elapsed="0.000024"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:44.739576" elapsed="0.000655"/>
</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-10-06T01:26:44.740625" elapsed="0.000312"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:44.741255" 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-10-06T01:26:44.738558" elapsed="0.003003"/>
</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-10-06T01:26:44.093650" elapsed="0.648284"/>
</kw>
<msg time="2026-10-06T01:26:44.742075" 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-10-06T01:26:44.092795" elapsed="0.649348"/>
</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-10-06T01:26:44.092225" elapsed="0.650018"/>
</kw>
<msg time="2026-10-06T01:26:44.742294" 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-10-06T01:26:44.091550" elapsed="0.650802"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:44.743244" elapsed="0.000398"/>
</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-10-06T01:26:44.743920" elapsed="0.000185"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:44.744296" elapsed="0.000123"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:44.742784" elapsed="0.001699"/>
</kw>
<msg time="2026-10-06T01:26:44.744600" 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-10-06T01:26:44.090441" elapsed="0.654211"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:44.745303" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:44.744994" elapsed="0.000362"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-10-06T01:26:44.745409" elapsed="0.000037"/>
</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-10-06T01:26:44.089119" elapsed="0.656431"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:44.088900" elapsed="0.656697"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:44.746755" level="INFO">${member_ip} = 10.30.170.97</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-10-06T01:26:44.746414" elapsed="0.000386"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:44.747758" 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-10-06T01:26:44.747883" 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-10-06T01:26:44.747551" elapsed="0.000365"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:44.752208" elapsed="0.000062"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:44.751313" elapsed="0.001033"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:44.751256" elapsed="0.001193"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:44.753813" 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-10-06T01:26:44.754172" 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-10-06T01:26:44.752932" elapsed="0.001399"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:44.755557" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.170.97" 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-10-06T01:26:44.754809" elapsed="0.001179"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:44.757413" level="INFO">${conn_id} = 385</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-10-06T01:26:44.756444" elapsed="0.001127"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:26:44.759484" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:26:44.759581" 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-10-06T01:26:44.759123" elapsed="0.000505"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:44.759922" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:26:44.761579" level="INFO">Logging into '10.30.170.97:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:26:45.431517" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-194-generic x86_64)

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

 System information as of Tue Oct  6 01:26:44 UTC 2026

  System load:  0.0                Processes:             121
  Usage of /:   14.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.97
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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

New release '24.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:23:57 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-0-builder-2 ~]&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-10-06T01:26:44.761239" elapsed="0.670363"/>
</kw>
<msg time="2026-10-06T01:26:45.431686" 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-10-06T01:26:44.760606" elapsed="0.671137"/>
</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-10-06T01:26:44.758146" elapsed="0.673784"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:26:45.432753" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-10-06T01:26:45.445797" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-10-06T01:26:45.446086" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:26:45.446263" 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-10-06T01:26:45.432275" elapsed="0.014119"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:45.446817" elapsed="0.000723"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:45.449307" 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-10-06T01:26:45.448517" elapsed="0.001034"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:45.450252" elapsed="0.000043"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:45.449859" elapsed="0.000498"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:45.449792" elapsed="0.000685"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:26:45.451135" elapsed="0.000088"/>
</return>
<status status="PASS" start="2026-10-06T01:26:45.450751" elapsed="0.000538"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:45.450633" elapsed="0.000777"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:45.451543" elapsed="0.000021"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:45.453764" elapsed="0.000501"/>
</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-10-06T01:26:45.454751" elapsed="0.000298"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:45.455388" elapsed="0.000242"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:45.452370" elapsed="0.003386"/>
</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-10-06T01:26:44.750159" elapsed="0.705900"/>
</kw>
<msg time="2026-10-06T01:26:45.456209" 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-10-06T01:26:44.749313" elapsed="0.706965"/>
</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-10-06T01:26:44.748780" elapsed="0.707595"/>
</kw>
<msg time="2026-10-06T01:26:45.456474" 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-10-06T01:26:44.748123" elapsed="0.708411"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:45.457512" elapsed="0.000427"/>
</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-10-06T01:26:45.458188" elapsed="0.000181"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:45.458560" elapsed="0.000235"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:45.457056" elapsed="0.001807"/>
</kw>
<msg time="2026-10-06T01:26:45.458973" 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-10-06T01:26:44.747066" elapsed="0.711939"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:45.459599" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:45.459289" elapsed="0.000412"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-10-06T01:26:45.459757" elapsed="0.000038"/>
</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-10-06T01:26:44.745983" elapsed="0.713911"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:44.745757" elapsed="0.714182"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:26:43.433659" elapsed="2.026319"/>
</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-10-06T01:26:43.431910" elapsed="2.028140"/>
</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-10-06T01:26:45.460256" elapsed="0.000283"/>
</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-10-06T01:26:45.472586" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:45.472470" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:45.472446" elapsed="0.000254"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:45.473079" 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-10-06T01:26:45.473183" 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-10-06T01:26:45.472923" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:45.473650" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:45.473397" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:45.474114" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:45.473895" elapsed="0.000260"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:45.474884" 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-10-06T01:26:45.474697" elapsed="0.000286">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-10-06T01:26:45.475080" level="INFO">${status} = FAIL</msg>
<msg time="2026-10-06T01:26:45.475121" 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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:45.474310" elapsed="0.000833"/>
</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-10-06T01:26:45.475424" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:45.475213" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:45.475196" elapsed="0.000318"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:45.476180" level="INFO">${ip_address} = 10.30.171.109</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-10-06T01:26:45.475971" elapsed="0.000233"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-10-06T01:26:45.476247" elapsed="0.000029"/>
</return>
<msg time="2026-10-06T01:26:45.476374" level="INFO">${odl_ip} = 10.30.171.109</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-10-06T01:26:45.475730" elapsed="0.000668"/>
</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-10-06T01:26:45.476570" elapsed="0.000350"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:45.477241" level="INFO">index=388
host=10.30.171.109
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-10-06T01:26:45.477432" level="INFO">${karaf_connection_object} = index=388
host=10.30.171.109
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_er...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-10-06T01:26:45.477126" elapsed="0.000332"/>
</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-10-06T01:26:45.477631" elapsed="0.000264"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-10-06T01:26:45.478276" level="INFO">Logging into '10.30.171.109:8101' as 'karaf'.</msg>
<msg time="2026-10-06T01:26:45.777309" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</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="PASS" start="2026-10-06T01:26:45.478078" elapsed="0.299361"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:45.778862" elapsed="0.000327"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-10-06T01:26:45.779372" elapsed="0.000149"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:45.779698" 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-10-06T01:26:45.778468" elapsed="0.001372"/>
</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-10-06T01:26:45.777846" elapsed="0.002038"/>
</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="PASS" start="2026-10-06T01:26:45.472172" elapsed="0.307760"/>
</kw>
<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="PASS" start="2026-10-06T01:26:45.463810" elapsed="0.316165"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:45.461010" elapsed="0.319012"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:45.460820" elapsed="0.319238"/>
</iter>
<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-10-06T01:26:45.785105" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:45.785014" elapsed="0.000137"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:45.784992" elapsed="0.000181"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:45.785489" 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-10-06T01:26:45.785584" 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-10-06T01:26:45.785366" elapsed="0.000260"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:45.786068" level="INFO">{1: 388}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:45.785830" elapsed="0.000278"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:45.786506" level="INFO">2</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:45.786292" elapsed="0.000253"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:45.787248" level="FAIL">Dictionary does not contain key '2'.</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-10-06T01:26:45.787070" elapsed="0.000276">Dictionary does not contain key '2'.</status>
</kw>
<msg time="2026-10-06T01:26:45.787441" level="INFO">${status} = FAIL</msg>
<msg time="2026-10-06T01:26:45.787481" level="INFO">${old_connection_index} = Dictionary does not contain key '2'.</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:45.786724" elapsed="0.000778"/>
</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-10-06T01:26:45.787817" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:45.787572" elapsed="0.000355"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:45.787555" elapsed="0.000396"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:45.788584" level="INFO">${ip_address} = 10.30.171.171</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-10-06T01:26:45.788372" elapsed="0.000253"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-10-06T01:26:45.788669" elapsed="0.000044"/>
</return>
<msg time="2026-10-06T01:26:45.788813" level="INFO">${odl_ip} = 10.30.171.171</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-10-06T01:26:45.788131" elapsed="0.000705"/>
</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-10-06T01:26:45.789009" elapsed="0.000317"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:45.789665" level="INFO">index=390
host=10.30.171.171
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-10-06T01:26:45.789769" level="INFO">${karaf_connection_object} = index=390
host=10.30.171.171
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_er...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-10-06T01:26:45.789532" elapsed="0.000262"/>
</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-10-06T01:26:45.789951" elapsed="0.000234"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-10-06T01:26:45.790562" level="INFO">Logging into '10.30.171.171:8101' as 'karaf'.</msg>
<msg time="2026-10-06T01:26:46.033025" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</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="PASS" start="2026-10-06T01:26:45.790367" elapsed="0.242782"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:46.034530" elapsed="0.000348"/>
</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-10-06T01:26:46.035062" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:46.035349" 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-10-06T01:26:46.034168" elapsed="0.001321"/>
</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-10-06T01:26:46.033527" elapsed="0.002004"/>
</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="PASS" start="2026-10-06T01:26:45.784766" elapsed="0.250811"/>
</kw>
<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="PASS" start="2026-10-06T01:26:45.780672" elapsed="0.254966"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:45.780285" elapsed="0.255423"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:45.780147" elapsed="0.255600"/>
</iter>
<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-10-06T01:26:46.040855" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:46.040762" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.040739" elapsed="0.000187"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:46.041244" 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-10-06T01:26:46.041338" 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-10-06T01:26:46.041121" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:46.041878" level="INFO">{1: 388, 2: 390}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:46.041618" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:46.042338" level="INFO">3</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:46.042105" elapsed="0.000275"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:46.043102" level="FAIL">Dictionary does not contain key '3'.</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-10-06T01:26:46.042920" elapsed="0.000284">Dictionary does not contain key '3'.</status>
</kw>
<msg time="2026-10-06T01:26:46.043360" level="INFO">${status} = FAIL</msg>
<msg time="2026-10-06T01:26:46.043406" level="INFO">${old_connection_index} = Dictionary does not contain key '3'.</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.042532" elapsed="0.000895"/>
</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-10-06T01:26:46.043741" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:46.043498" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.043481" elapsed="0.000352"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:46.044468" level="INFO">${ip_address} = 10.30.170.97</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-10-06T01:26:46.044255" elapsed="0.000237"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-10-06T01:26:46.044536" elapsed="0.000029"/>
</return>
<msg time="2026-10-06T01:26:46.044698" level="INFO">${odl_ip} = 10.30.170.97</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-10-06T01:26:46.044014" elapsed="0.000709"/>
</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-10-06T01:26:46.044895" elapsed="0.000319"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:46.045544" level="INFO">index=392
host=10.30.170.97
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-10-06T01:26:46.045648" level="INFO">${karaf_connection_object} = index=392
host=10.30.170.97
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_err...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-10-06T01:26:46.045423" elapsed="0.000263"/>
</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-10-06T01:26:46.045846" elapsed="0.000233"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-10-06T01:26:46.046453" level="INFO">Logging into '10.30.170.97:8101' as 'karaf'.</msg>
<msg time="2026-10-06T01:26:46.326172" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</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="PASS" start="2026-10-06T01:26:46.046260" elapsed="0.280045"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:46.327710" elapsed="0.000316"/>
</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-10-06T01:26:46.328214" elapsed="0.000150"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:46.328505" elapsed="0.000106"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:46.327313" elapsed="0.001347"/>
</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-10-06T01:26:46.326710" elapsed="0.002016"/>
</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="PASS" start="2026-10-06T01:26:46.040491" elapsed="0.288296"/>
</kw>
<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="PASS" start="2026-10-06T01:26:46.036348" elapsed="0.293588"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.035980" elapsed="0.294014"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:46.035842" elapsed="0.294191"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="PASS" start="2026-10-06T01:26:45.460627" elapsed="0.869444"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-10-06T01:26:43.411497" elapsed="2.918637"/>
</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-10-06T01:26:46.331066" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:46.330956" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.330932" elapsed="0.000204"/>
</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-10-06T01:26:46.333035" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:46.332951" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.332935" elapsed="0.000164"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:26:46.333980" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:26:46.333623" elapsed="0.000382"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:46.334431" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:46.334157" elapsed="0.000299"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:26:46.334497" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:26:46.334646" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:26:46.333305" elapsed="0.001365"/>
</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-10-06T01:26:46.337041" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:46.336956" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.336939" elapsed="0.000165"/>
</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-10-06T01:26:46.338184" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:46.338079" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.338062" elapsed="0.000259"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:46.338877" level="INFO">${karaf_connection_index} = 388</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-10-06T01:26:46.338467" elapsed="0.000450"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:46.339382" 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-10-06T01:26:46.339160" elapsed="0.000261"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:46.374498" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "r "k "s "p "a "c "e "/ "o "v "s "[78Cd "[A[78Cb</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:46.341195" elapsed="0.033465"/>
</kw>
<msg time="2026-10-06T01:26:46.374828" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:46.374896" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.339660" elapsed="0.035287"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:46.439132" level="INFO">"- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "o "v "s "d "b "/ "S "o "u "t "h "b "o "u "n "[78Cd "[A[78C_
 "C "l "u "s "t "e "r "/ "0 "1 "0 "_ "_ "O "v "s "d "b "_ "S "o "u "t "h "b "o "u "n "d "_ "C "l "u "s "t "e "r ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:46.376513" elapsed="0.062800"/>
</kw>
<msg time="2026-10-06T01:26:46.439461" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:46.439529" level="INFO">${message_wait} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.375199" elapsed="0.064380"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:46.440032" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:46.439775" elapsed="0.000431"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.439754" elapsed="0.000481"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:46.440933" level="INFO"> "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "o "v "s "d "b "/ "S "o "u "t "h "b "o "u "n "[78Cd "[A[78C_
 "C "l "u "s "t "e "r "/ "0 "1 "0 "_ "_ "O "v "s "d "b "_ "S "o "u "t "h "b "o "u "n "d "_ "C "l "u "s "t "e "r ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:46.440419" elapsed="0.000642"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:46.441423" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:46.441180" elapsed="0.000377"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.441161" elapsed="0.000421"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:46.441628" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:46.443644" elapsed="0.000304"/>
</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-10-06T01:26:46.444172" elapsed="0.000150"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:46.444502" elapsed="0.000108"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:46.443004" elapsed="0.001780"/>
</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-10-06T01:26:46.441948" elapsed="0.002934"/>
</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="PASS" start="2026-10-06T01:26:46.337874" elapsed="0.107085"/>
</kw>
<msg time="2026-10-06T01:26:46.445043" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:46.445083" level="INFO">${message} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.337250" elapsed="0.107869"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:46.445274" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:26:46.445189" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.445171" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:26:46.445873" elapsed="0.000025"/>
</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-10-06T01:26:46.446222" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:46.446287" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:26:46.336722" elapsed="0.109650"/>
</kw>
<msg time="2026-10-06T01:26:46.446455" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:46.446494" level="INFO">${output} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.335033" elapsed="0.111496"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:46.446850" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:46.446615" elapsed="0.000496"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.446583" elapsed="0.000552"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:46.334892" elapsed="0.112265"/>
</iter>
<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-10-06T01:26:46.449449" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:46.449364" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.449347" elapsed="0.000164"/>
</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-10-06T01:26:46.450559" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:46.450454" elapsed="0.000245"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.450437" elapsed="0.000290"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:46.451224" level="INFO">${karaf_connection_index} = 390</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-10-06T01:26:46.450871" elapsed="0.000391"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:46.451780" 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-10-06T01:26:46.451495" elapsed="0.000324"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:46.490395" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "r "k "s "p "a "c "e "/ "o "v "s "[78Cd "[A[78Cb</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:46.453354" elapsed="0.037186"/>
</kw>
<msg time="2026-10-06T01:26:46.490738" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:46.490805" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.452040" elapsed="0.038815"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:46.554157" level="INFO">"- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "o "v "s "d "b "/ "S "o "u "t "h "b "o "u "n "[78Cd "[A[78C_
 "C "l "u "s "t "e "r "/ "0 "1 "0 "_ "_ "O "v "s "d "b "_ "S "o "u "t "h "b "o "u "n "d "_ "C "l "u "s "t "e "r ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:46.492388" elapsed="0.061940"/>
</kw>
<msg time="2026-10-06T01:26:46.554466" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:46.554534" level="INFO">${message_wait} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.491104" elapsed="0.063479"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:46.555022" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:46.554775" elapsed="0.000384"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.554755" elapsed="0.000429"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:46.556029" level="INFO"> "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "o "v "s "d "b "/ "S "o "u "t "h "b "o "u "n "[78Cd "[A[78C_
 "C "l "u "s "t "e "r "/ "0 "1 "0 "_ "_ "O "v "s "d "b "_ "S "o "u "t "h "b "o "u "n "d "_ "C "l "u "s "t "e "r ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:46.555362" elapsed="0.000796"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:46.556522" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:46.556278" elapsed="0.000417"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.556259" elapsed="0.000464"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:46.556755" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:46.558718" elapsed="0.000371"/>
</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-10-06T01:26:46.559318" elapsed="0.000138"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:46.559658" elapsed="0.000164"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:46.558062" elapsed="0.001863"/>
</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-10-06T01:26:46.557019" elapsed="0.003003"/>
</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="PASS" start="2026-10-06T01:26:46.450252" elapsed="0.109846"/>
</kw>
<msg time="2026-10-06T01:26:46.560179" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:46.560218" level="INFO">${message} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.449695" elapsed="0.110559"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:46.560408" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:26:46.560324" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.560306" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:46.560948" elapsed="0.000024"/>
</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-10-06T01:26:46.561293" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:46.561404" 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="PASS" start="2026-10-06T01:26:46.449128" elapsed="0.112366"/>
</kw>
<msg time="2026-10-06T01:26:46.561592" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:46.561644" level="INFO">${output} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.447407" elapsed="0.114292"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:46.561990" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:46.561770" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.561753" elapsed="0.000308"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:46.447268" elapsed="0.114815"/>
</iter>
<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-10-06T01:26:46.564374" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:46.564290" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.564273" elapsed="0.000163"/>
</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-10-06T01:26:46.565470" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:46.565367" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.565351" elapsed="0.000266"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:46.566142" level="INFO">${karaf_connection_index} = 392</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-10-06T01:26:46.565791" elapsed="0.000389"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:46.566634" 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-10-06T01:26:46.566412" elapsed="0.000276"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:46.601766" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "r "k "s "p "a "c "e "/ "o "v "s "[78Cd "[A[78Cb</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:46.568189" elapsed="0.033721"/>
</kw>
<msg time="2026-10-06T01:26:46.602051" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:46.602119" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.566910" elapsed="0.035259"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:46.660612" level="INFO">"- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "o "v "s "d "b "/ "S "o "u "t "h "b "o "u "n "[78Cd "[A[78C_
 "C "l "u "s "t "e "r "/ "0 "1 "0 "_ "_ "O "v "s "d "b "_ "S "o "u "t "h "b "o "u "n "d "_ "C "l "u "s "t "e "r ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:46.603762" elapsed="0.057075"/>
</kw>
<msg time="2026-10-06T01:26:46.661566" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:46.661652" level="INFO">${message_wait} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.602416" elapsed="0.059303"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:46.662154" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:46.661885" elapsed="0.000407"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.661865" elapsed="0.000453"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:46.663031" level="INFO"> "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "o "v "s "d "b "/ "S "o "u "t "h "b "o "u "n "[78Cd "[A[78C_
 "C "l "u "s "t "e "r "/ "0 "1 "0 "_ "_ "O "v "s "d "b "_ "S "o "u "t "h "b "o "u "n "d "_ "C "l "u "s "t "e "r ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:46.662497" elapsed="0.000659"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:46.663514" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:46.663274" elapsed="0.000416"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.663256" elapsed="0.000461"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:46.663749" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:46.665897" elapsed="0.000278"/>
</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-10-06T01:26:46.666430" elapsed="0.000138"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:46.666849" 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-10-06T01:26:46.665046" elapsed="0.001998"/>
</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-10-06T01:26:46.664013" elapsed="0.003128"/>
</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="PASS" start="2026-10-06T01:26:46.565165" elapsed="0.102049"/>
</kw>
<msg time="2026-10-06T01:26:46.667296" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:46.667335" level="INFO">${message} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.564580" elapsed="0.102791"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:46.667523" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:26:46.667440" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.667422" elapsed="0.000197"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:46.668027" elapsed="0.000025"/>
</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-10-06T01:26:46.668368" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:46.668434" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:26:46.564057" elapsed="0.104460"/>
</kw>
<msg time="2026-10-06T01:26:46.668616" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:46.668657" level="INFO">${output} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.562327" elapsed="0.106388"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:46.668999" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:46.668785" elapsed="0.000262"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.668768" elapsed="0.000301"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:46.562191" elapsed="0.106900"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:26:46.334740" elapsed="0.334377"/>
</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-10-06T01:26:46.332722" elapsed="0.336445"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-10-06T01:26:46.330754" elapsed="0.338463"/>
</kw>
<arg>KarafKeywords.Log_Test_Suite_Start_To_Controller_Karaf</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.330293" elapsed="0.338963"/>
</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-10-06T01:26:43.409048" elapsed="3.260257"/>
</kw>
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-10-06T01:26:46.670180" level="INFO">${already_done} = True</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-10-06T01:26:46.669883" elapsed="0.000322"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="PASS" start="2026-10-06T01:26:46.670343" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:26:46.670270" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.670253" elapsed="0.000163"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:46.670589" elapsed="0.000035"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<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="NOT RUN" start="2026-10-06T01:26:46.670800" elapsed="0.000020"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<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 errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:46.670969" elapsed="0.000018"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<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="NOT RUN" start="2026-10-06T01:26:46.671146" elapsed="0.000018"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<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="NOT RUN" start="2026-10-06T01:26:46.671372" elapsed="0.000022"/>
</kw>
<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-10-06T01:26:46.669543" elapsed="0.001941"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:43.408764" elapsed="3.262766"/>
</kw>
<test id="s1-s2-s1-t1" name="Check Shards Status Before Fail" line="17">
<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-10-06T01:26:46.672838" elapsed="0.000202"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:26:46.672555" elapsed="0.000535"/>
</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-10-06T01:26:46.673998" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:46.673913" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.673896" elapsed="0.000164"/>
</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-10-06T01:26:46.676124" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:46.676040" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.676024" elapsed="0.000161"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:26:46.677107" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:26:46.676772" elapsed="0.000361"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:46.677552" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:46.677283" elapsed="0.000293"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:26:46.677634" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:26:46.677775" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:26:46.676387" elapsed="0.001411"/>
</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-10-06T01:26:46.680170" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:46.680086" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.680068" elapsed="0.000164"/>
</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-10-06T01:26:46.681314" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:46.681230" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.681214" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:46.681779" level="INFO">${karaf_connection_index} = 388</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-10-06T01:26:46.681517" elapsed="0.000287"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:46.682138" 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-10-06T01:26:46.681965" elapsed="0.000197"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:46.718028" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:46.682772" elapsed="0.035430"/>
</kw>
<msg time="2026-10-06T01:26:46.718358" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:46.718400" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.682314" elapsed="0.036121"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:46.783230" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "B "e "f "[78Co "[A[78Cr
 "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:46.719044" elapsed="0.064361"/>
</kw>
<msg time="2026-10-06T01:26:46.783561" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:46.783661" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.718607" elapsed="0.065111"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:46.783994" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:46.783791" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.783772" elapsed="0.000349"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:46.784654" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "B "e "f "[78Co "[A[78Cr
 "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:46.784303" elapsed="0.000447"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:46.785011" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:46.784813" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.784796" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:46.785135" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:46.787585" elapsed="0.000512"/>
</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-10-06T01:26:46.789326" elapsed="0.000612"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:46.791320" elapsed="0.000325"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:46.785929" elapsed="0.005801"/>
</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-10-06T01:26:46.785399" elapsed="0.006449"/>
</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="PASS" start="2026-10-06T01:26:46.680973" elapsed="0.110952"/>
</kw>
<msg time="2026-10-06T01:26:46.792006" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:46.792045" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.680377" elapsed="0.111704"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:46.792235" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:26:46.792151" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.792133" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:26:46.792632" elapsed="0.000024"/>
</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-10-06T01:26:46.793013" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:46.793078" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:26:46.679798" elapsed="0.113365"/>
</kw>
<msg time="2026-10-06T01:26:46.793245" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:46.793284" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.678122" elapsed="0.115197"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:46.793614" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:46.793386" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.793370" elapsed="0.000333"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:46.677984" elapsed="0.115740"/>
</iter>
<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-10-06T01:26:46.796111" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:46.796027" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.796010" elapsed="0.000162"/>
</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-10-06T01:26:46.797269" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:46.797185" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.797169" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:46.797733" level="INFO">${karaf_connection_index} = 390</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-10-06T01:26:46.797473" elapsed="0.000285"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:46.798091" 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-10-06T01:26:46.797918" elapsed="0.000196"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:46.835036" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:46.798755" elapsed="0.036477"/>
</kw>
<msg time="2026-10-06T01:26:46.835387" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:46.835429" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.798301" elapsed="0.037163"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:46.900018" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "B "e "f "[78Co "[A[78Cr
 "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:46.836081" elapsed="0.064113"/>
</kw>
<msg time="2026-10-06T01:26:46.900351" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:46.900392" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.835641" elapsed="0.064785"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:46.900742" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:46.900496" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.900478" elapsed="0.000360"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:46.901354" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "B "e "f "[78Co "[A[78Cr
 "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:46.901022" elapsed="0.000411"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:46.901722" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:46.901494" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.901477" elapsed="0.000341"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:46.901848" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:46.904302" elapsed="0.000513"/>
</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-10-06T01:26:46.906035" elapsed="0.000451"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:46.907951" elapsed="0.000441"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:46.902616" elapsed="0.005844"/>
</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-10-06T01:26:46.902109" elapsed="0.006468"/>
</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="PASS" start="2026-10-06T01:26:46.796929" elapsed="0.111740"/>
</kw>
<msg time="2026-10-06T01:26:46.908769" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:46.908808" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.796318" elapsed="0.112526"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:46.908999" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:26:46.908914" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.908897" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:46.909384" elapsed="0.000023"/>
</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-10-06T01:26:46.909797" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:46.909864" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:26:46.795741" elapsed="0.114207"/>
</kw>
<msg time="2026-10-06T01:26:46.910064" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:46.910105" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.793967" elapsed="0.116173"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:46.910423" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:46.910209" elapsed="0.000262"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.910193" elapsed="0.000300"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:46.793832" elapsed="0.116681"/>
</iter>
<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-10-06T01:26:46.912888" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:46.912804" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.912786" elapsed="0.000164"/>
</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-10-06T01:26:46.914047" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:46.913963" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:46.913946" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:46.914474" level="INFO">${karaf_connection_index} = 392</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-10-06T01:26:46.914250" elapsed="0.000249"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:46.914865" 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-10-06T01:26:46.914671" elapsed="0.000218"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:46.948406" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:46.915454" elapsed="0.033165"/>
</kw>
<msg time="2026-10-06T01:26:46.948801" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:46.948842" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.915043" elapsed="0.033835"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:47.011463" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "B "e "f "[78Co "[A[78Cr
 "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:46.949465" elapsed="0.062189"/>
</kw>
<msg time="2026-10-06T01:26:47.011842" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:47.011884" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.949041" elapsed="0.062879"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:47.012195" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:47.011990" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:47.011972" elapsed="0.000316"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:47.012848" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "B "e "f "[78Co "[A[78Cr
 "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:47.012470" elapsed="0.000460"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:47.013186" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:47.012990" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:47.012974" elapsed="0.000304"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:47.013308" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:47.015829" elapsed="0.000474"/>
</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-10-06T01:26:47.017535" elapsed="0.000503"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:47.019236" elapsed="0.000507"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:47.014105" elapsed="0.005742"/>
</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-10-06T01:26:47.013572" elapsed="0.006393"/>
</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="PASS" start="2026-10-06T01:26:46.913706" elapsed="0.106336"/>
</kw>
<msg time="2026-10-06T01:26:47.020124" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:47.020163" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.913096" elapsed="0.107102"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:47.020351" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:26:47.020268" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:47.020250" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:47.021024" elapsed="0.000025"/>
</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-10-06T01:26:47.021324" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:47.021388" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:26:46.912479" elapsed="0.108995"/>
</kw>
<msg time="2026-10-06T01:26:47.021556" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:47.021608" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.910785" elapsed="0.110860"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:47.021945" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:47.021729" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:47.021711" elapsed="0.000305"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:46.910633" elapsed="0.111405"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:26:46.677847" elapsed="0.344217"/>
</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-10-06T01:26:46.675745" elapsed="0.346367"/>
</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-10-06T01:26:46.673640" elapsed="0.348522"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:46.673234" elapsed="0.348968"/>
</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-10-06T01:26:46.672218" elapsed="0.350031"/>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:26:47.029763" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:26:47.029510" elapsed="0.000289">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:47.029120" elapsed="0.000789">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:26:47.029957" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:26:47.026261" elapsed="0.003739"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:26:47.025903" elapsed="0.004180">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:47.030300" elapsed="0.000020"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:47.030539" elapsed="0.000022"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:47.030819" elapsed="0.000023"/>
</kw>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:26:47.022443" elapsed="0.008481">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:26:46.671627" elapsed="0.359419">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</test>
<test id="s1-s2-s1-t2" name="Start OVS Multiple Connections" line="21">
<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-10-06T01:26:47.032386" elapsed="0.000198"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:26:47.032143" elapsed="0.000508"/>
</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-10-06T01:26:47.033748" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:47.033445" elapsed="0.000349"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:47.033427" elapsed="0.000389"/>
</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-10-06T01:26:47.035668" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:47.035569" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:47.035553" elapsed="0.000200"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:26:47.036650" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:26:47.036306" elapsed="0.000384"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:47.037114" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:47.036842" elapsed="0.000296"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:26:47.037178" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:26:47.037305" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:26:47.035954" elapsed="0.001374"/>
</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-10-06T01:26:47.039738" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:47.039634" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:47.039616" elapsed="0.000185"/>
</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-10-06T01:26:47.040895" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:47.040812" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:47.040795" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:47.041321" level="INFO">${karaf_connection_index} = 388</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-10-06T01:26:47.041098" elapsed="0.000248"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:47.041706" 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-10-06T01:26:47.041505" elapsed="0.000226"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:47.079225" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:47.042292" elapsed="0.037109"/>
</kw>
<msg time="2026-10-06T01:26:47.079560" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:47.079623" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:47.041885" elapsed="0.037774"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:47.157337" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "t "a "r "t "[C "O "V "S "[C "M "u "l "t "i "p "l "e "[C "C "o "n "n "[78Ce "[A[78Cc
 "t "i "o "n "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:47.080262" elapsed="0.077246"/>
</kw>
<msg time="2026-10-06T01:26:47.157700" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:47.157743" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:47.079843" elapsed="0.077935"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:47.158082" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:47.157847" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:47.157829" elapsed="0.000349"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:47.158730" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "t "a "r "t "[C "O "V "S "[C "M "u "l "t "i "p "l "e "[C "C "o "n "n "[78Ce "[A[78Cc
 "t "i "o "n "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:47.158357" elapsed="0.000452"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:47.159067" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:47.158871" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:47.158854" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:47.159189" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:47.161692" elapsed="0.000595"/>
</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-10-06T01:26:47.163514" elapsed="0.000497"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:47.165229" elapsed="0.000422"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:47.159989" elapsed="0.005985"/>
</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-10-06T01:26:47.159452" elapsed="0.006641"/>
</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="PASS" start="2026-10-06T01:26:47.040518" elapsed="0.125651"/>
</kw>
<msg time="2026-10-06T01:26:47.166250" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:47.166289" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:47.039946" elapsed="0.126377"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:47.166477" elapsed="0.000023"/>
</return>
<status status="PASS" start="2026-10-06T01:26:47.166392" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:47.166375" elapsed="0.000177"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:26:47.166895" elapsed="0.000024"/>
</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-10-06T01:26:47.167194" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:47.167258" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:26:47.039335" elapsed="0.128007"/>
</kw>
<msg time="2026-10-06T01:26:47.167424" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:47.167463" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:47.037666" elapsed="0.129832"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:47.167879" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:47.167564" elapsed="0.000366"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:47.167549" elapsed="0.000403"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:47.037510" elapsed="0.130463"/>
</iter>
<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-10-06T01:26:47.170297" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:47.170212" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:47.170195" elapsed="0.000164"/>
</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-10-06T01:26:47.171450" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:47.171365" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:47.171349" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:47.171912" level="INFO">${karaf_connection_index} = 390</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-10-06T01:26:47.171668" elapsed="0.000268"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:47.172308" 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-10-06T01:26:47.172131" elapsed="0.000201"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:47.205207" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:47.172937" elapsed="0.032461"/>
</kw>
<msg time="2026-10-06T01:26:47.205555" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:47.205617" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:47.172486" elapsed="0.033167"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:47.276491" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "t "a "r "t "[C "O "V "S "[C "M "u "l "t "i "p "l "e "[C "C "o "n "n "[78Ce "[A[78Cc
 "t "i "o "n "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:47.206256" elapsed="0.070451"/>
</kw>
<msg time="2026-10-06T01:26:47.276873" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:47.276916" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:47.205837" elapsed="0.071116"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:47.277235" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:47.277025" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:47.277006" elapsed="0.000324"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:47.277895" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "t "a "r "t "[C "O "V "S "[C "M "u "l "t "i "p "l "e "[C "C "o "n "n "[78Ce "[A[78Cc
 "t "i "o "n "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:47.277511" elapsed="0.000464"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:47.278234" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:47.278037" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:47.278020" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:47.278356" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:47.280852" elapsed="0.000472"/>
</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-10-06T01:26:47.282548" elapsed="0.001795"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:47.285553" elapsed="0.000485"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:47.279153" elapsed="0.006952"/>
</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-10-06T01:26:47.278633" elapsed="0.007588"/>
</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="PASS" start="2026-10-06T01:26:47.171109" elapsed="0.115187"/>
</kw>
<msg time="2026-10-06T01:26:47.286377" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:47.286416" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:47.170503" elapsed="0.115949"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:47.286626" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:26:47.286521" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:47.286504" elapsed="0.000219"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:47.287037" elapsed="0.000023"/>
</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-10-06T01:26:47.287333" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:47.287397" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:26:47.169925" elapsed="0.117589"/>
</kw>
<msg time="2026-10-06T01:26:47.287611" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:47.287651" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:47.168214" elapsed="0.119594"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:47.288098" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:47.287880" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:47.287864" elapsed="0.000305"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:47.168080" elapsed="0.120110"/>
</iter>
<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-10-06T01:26:47.290524" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:47.290441" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:47.290424" elapsed="0.000163"/>
</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-10-06T01:26:47.291723" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:47.291615" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:47.291584" elapsed="0.000202"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:26:47.292150" level="INFO">${karaf_connection_index} = 392</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-10-06T01:26:47.291927" elapsed="0.000247"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:47.292505" 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-10-06T01:26:47.292332" elapsed="0.000197"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:26:47.337094" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:26:47.293131" elapsed="0.044137"/>
</kw>
<msg time="2026-10-06T01:26:47.337437" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:26:47.337478" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:47.292720" elapsed="0.044792"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:26:47.394864" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "t "a "r "t "[C "O "V "S "[C "M "u "l "t "i "p "l "e "[C "C "o "n "n "[78Ce "[A[78Cc
 "t "i "o "n "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:26:47.338129" elapsed="0.056908"/>
</kw>
<msg time="2026-10-06T01:26:47.395189" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:26:47.395230" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:47.337709" elapsed="0.057555"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:47.395532" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:47.395333" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:47.395315" elapsed="0.000327"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:47.396169" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "t "a "r "t "[C "O "V "S "[C "M "u "l "t "i "p "l "e "[C "C "o "n "n "[78Ce "[A[78Cc
 "t "i "o "n "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:47.395839" elapsed="0.000406"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:47.396500" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:47.396306" elapsed="0.000263"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:47.396290" elapsed="0.000317"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:26:47.396639" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:47.399069" elapsed="0.000467"/>
</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-10-06T01:26:47.400781" elapsed="0.000448"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:47.402616" elapsed="0.000451"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:47.397399" elapsed="0.005735"/>
</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-10-06T01:26:47.396916" elapsed="0.006334"/>
</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="PASS" start="2026-10-06T01:26:47.291344" elapsed="0.111982"/>
</kw>
<msg time="2026-10-06T01:26:47.403406" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:47.403445" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:47.290768" elapsed="0.112711"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:26:47.403652" elapsed="0.000099"/>
</return>
<status status="PASS" start="2026-10-06T01:26:47.403549" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:47.403532" elapsed="0.000276"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:47.404118" elapsed="0.000024"/>
</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-10-06T01:26:47.404414" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:26:47.404477" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:26:47.290151" elapsed="0.114411"/>
</kw>
<msg time="2026-10-06T01:26:47.404664" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:26:47.404720" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:47.288431" elapsed="0.116325"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:47.405039" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:47.404824" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:47.404808" elapsed="0.000302"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:47.288295" elapsed="0.116836"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:26:47.037374" elapsed="0.367783"/>
</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-10-06T01:26:47.035278" elapsed="0.369926"/>
</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-10-06T01:26:47.033193" elapsed="0.372061"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:26:47.032812" elapsed="0.372481"/>
</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-10-06T01:26:47.031805" elapsed="0.373535"/>
</kw>
<kw name="Add Multiple Managers to OVS" owner="OVSDB">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:26:47.407984" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:26:47.407644" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:26:47.408425" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:26:47.408155" elapsed="0.000294"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:26:47.408489" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:26:47.408629" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${controller_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-10-06T01:26:47.407282" elapsed="0.001371"/>
</kw>
<kw name="Clean Mininet System" owner="Utils">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:47.410778" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:47.410516" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:47.410499" elapsed="0.000355"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:47.411166" 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-10-06T01:26:47.411290" 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-10-06T01:26:47.411040" elapsed="0.000276"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:47.411816" level="INFO">Attempting to execute command "sudo mn -c" on remote system "10.30.170.234" 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-10-06T01:26:47.411500" elapsed="0.000358"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:47.412330" level="INFO">${conn_id} = 403</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-10-06T01:26:47.412031" elapsed="0.000323"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:26:47.413190" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:26:47.413258" 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-10-06T01:26:47.412929" elapsed="0.000351"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:47.413425" elapsed="0.000311"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:26:47.414664" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:26:47.782697" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:26:22 UTC 2026

  System load:  0.09               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:26:42 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:26:47.414415" elapsed="0.368429"/>
</kw>
<msg time="2026-10-06T01:26:47.782926" 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-10-06T01:26:47.413898" elapsed="0.369108"/>
</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-10-06T01:26:47.412545" elapsed="0.370567"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:26:47.783644" level="INFO">Executing command 'sudo mn -c'.</msg>
<msg time="2026-10-06T01:26:48.992006" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:26:48.992395" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:26:48.992487" level="INFO">${stderr} = *** Removing excess controllers/ofprotocols/ofdatapaths/pings/noxes
killall controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec iv...</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-10-06T01:26:47.783393" elapsed="1.209149"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:48.993283" elapsed="0.000714"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:48.995194" level="INFO">*** Removing excess controllers/ofprotocols/ofdatapaths/pings/noxes
killall controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec ivs ryu-manager 2&gt; /dev/null
killall -9 controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec ivs ryu-manager 2&gt; /dev/null
pkill -9 -f "sudo mnexec"
*** Removing junk from /tmp
rm -f /tmp/vconn* /tmp/vlogs* /tmp/*.out /tmp/*.log
*** Removing old X11 tunnels
*** Removing excess kernel datapaths
ps ax | egrep -o 'dp[0-9]+' | sed 's/dp/nl:/'
***  Removing OVS datapaths
ovs-vsctl --timeout=1 list-br
ovs-vsctl --timeout=1 list-br
*** Removing all links of the pattern foo-ethX
ip link show | egrep -o '([-_.[:alnum:]]+-eth[[:digit:]]+)'
ip link show
*** Killing stale mininet node processes
pkill -9 -f mininet:
*** Shutting down stale tunnels
pkill -9 -f Tunnel=Ethernet
pkill -9 -f .ssh/mn
rm -f ~/.ssh/mn/*
*** Cleanup complete.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:48.994511" elapsed="0.000798"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:48.995794" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:48.995484" elapsed="0.000418"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:48.995431" elapsed="0.000523"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:26:48.996244" elapsed="0.000069"/>
</return>
<status status="PASS" start="2026-10-06T01:26:48.996060" elapsed="0.000323"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:48.996030" elapsed="0.000402"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:48.996501" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:48.998273" elapsed="0.000702"/>
</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-10-06T01:26:48.999487" elapsed="0.000387"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:49.000191" elapsed="0.000197"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:48.997238" elapsed="0.003257"/>
</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-10-06T01:26:47.410101" elapsed="1.590605"/>
</kw>
<msg time="2026-10-06T01:26:49.000819" 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-10-06T01:26:47.409564" elapsed="1.591367"/>
</kw>
<arg>${system}</arg>
<arg>sudo mn -c</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:26:47.409162" elapsed="1.591933"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:49.005245" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:49.004711" elapsed="0.000650"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:49.004645" elapsed="0.000767"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:49.006182" 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-10-06T01:26:49.006390" 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-10-06T01:26:49.005898" elapsed="0.000546"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:49.007551" level="INFO">Attempting to execute command "sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh" on remote system "10.30.170.234" 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-10-06T01:26:49.006908" elapsed="0.000792"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:49.008813" level="INFO">${conn_id} = 405</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-10-06T01:26:49.008092" elapsed="0.000778"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:26:49.011146" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:26:49.011304" 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-10-06T01:26:49.010141" elapsed="0.001214"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:49.011740" elapsed="0.000637"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:26:49.014171" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:26:49.402656" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:26:22 UTC 2026

  System load:  0.09               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:26:47 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:26:49.013619" elapsed="0.389182"/>
</kw>
<msg time="2026-10-06T01:26:49.402876" 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-10-06T01:26:49.012792" elapsed="0.390160"/>
</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-10-06T01:26:49.009299" elapsed="0.393750"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:26:49.403511" level="INFO">Executing command 'sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh'.</msg>
<msg time="2026-10-06T01:26:49.446499" level="INFO">Command exited with return code -1.</msg>
<msg time="2026-10-06T01:26:49.446808" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:26:49.446878" level="INFO">${stderr} = </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-10-06T01:26:49.403306" elapsed="0.043609"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:49.447218" elapsed="0.000326"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:49.448317" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:49.447912" elapsed="0.000459"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:49.448665" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:49.448485" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:49.448450" elapsed="0.000334"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:26:49.448969" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-10-06T01:26:49.448852" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:49.448833" elapsed="0.000245"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:49.449120" elapsed="0.000019"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:49.450168" elapsed="0.000398"/>
</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-10-06T01:26:49.450860" elapsed="0.000204"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:49.451257" elapsed="0.000122"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:49.449545" elapsed="0.001899"/>
</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-10-06T01:26:49.003715" elapsed="0.447824"/>
</kw>
<msg time="2026-10-06T01:26:49.451620" 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-10-06T01:26:49.002452" elapsed="0.449254"/>
</kw>
<arg>${system}</arg>
<arg>sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:26:49.001447" elapsed="0.450365"/>
</kw>
<arg>${tools_system}</arg>
<status status="PASS" start="2026-10-06T01:26:47.408849" elapsed="2.043035"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:49.452419" level="INFO">${ovs_opt} = </msg>
<var>${ovs_opt}</var>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:49.452088" elapsed="0.000364"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Catenate" owner="BuiltIn">
<msg time="2026-10-06T01:26:49.453412" level="INFO">${ovs_opt} =   tcp:10.30.171.109:6640</msg>
<var>${ovs_opt}</var>
<arg>${ovs_opt}</arg>
<arg>${SPACE}tcp:${ODL_SYSTEM_${index}_IP}:${ovs_mgr_port}</arg>
<doc>Concatenates the given items together and returns the resulted string.</doc>
<status status="PASS" start="2026-10-06T01:26:49.452945" elapsed="0.000501"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:49.454063" level="INFO">  tcp:10.30.171.109:6640</msg>
<arg>${ovs_opt}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:49.453755" elapsed="0.000364"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:26:49.452744" elapsed="0.001417"/>
</iter>
<iter>
<kw name="Catenate" owner="BuiltIn">
<msg time="2026-10-06T01:26:49.454950" level="INFO">${ovs_opt} =   tcp:10.30.171.109:6640  tcp:10.30.171.171:6640</msg>
<var>${ovs_opt}</var>
<arg>${ovs_opt}</arg>
<arg>${SPACE}tcp:${ODL_SYSTEM_${index}_IP}:${ovs_mgr_port}</arg>
<doc>Concatenates the given items together and returns the resulted string.</doc>
<status status="PASS" start="2026-10-06T01:26:49.454463" elapsed="0.000521"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:49.455556" level="INFO">  tcp:10.30.171.109:6640  tcp:10.30.171.171:6640</msg>
<arg>${ovs_opt}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:49.455246" elapsed="0.000383"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:26:49.454274" elapsed="0.001415"/>
</iter>
<iter>
<kw name="Catenate" owner="BuiltIn">
<msg time="2026-10-06T01:26:49.456441" level="INFO">${ovs_opt} =   tcp:10.30.171.109:6640  tcp:10.30.171.171:6640  tcp:10.30.170.97:6640</msg>
<var>${ovs_opt}</var>
<arg>${ovs_opt}</arg>
<arg>${SPACE}tcp:${ODL_SYSTEM_${index}_IP}:${ovs_mgr_port}</arg>
<doc>Concatenates the given items together and returns the resulted string.</doc>
<status status="PASS" start="2026-10-06T01:26:49.455994" elapsed="0.000481"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:49.457072" level="INFO">  tcp:10.30.171.109:6640  tcp:10.30.171.171:6640  tcp:10.30.170.97:6640</msg>
<arg>${ovs_opt}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:49.456772" elapsed="0.000356"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:26:49.455804" elapsed="0.001366"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:26:49.452526" elapsed="0.004682"/>
</for>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:49.460119" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:49.459789" elapsed="0.000402"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:49.459764" elapsed="0.000460"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:49.460699" 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-10-06T01:26:49.460831" 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-10-06T01:26:49.460486" elapsed="0.000425"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:49.461608" level="INFO">Attempting to execute command "sudo ovs-vsctl set-manager   tcp:10.30.171.109:6640  tcp:10.30.171.171:6640  tcp:10.30.170.97:6640" on remote system "10.30.170.234" 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-10-06T01:26:49.461178" elapsed="0.000493"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:49.462355" level="INFO">${conn_id} = 407</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-10-06T01:26:49.461935" elapsed="0.000453"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:26:49.463554" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:26:49.463669" 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-10-06T01:26:49.463198" elapsed="0.000520"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:49.463927" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:26:49.465399" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:26:49.823846" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:26:22 UTC 2026

  System load:  0.09               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:26:49 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:26:49.465081" elapsed="0.358954"/>
</kw>
<msg time="2026-10-06T01:26:49.824139" 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-10-06T01:26:49.464542" elapsed="0.359702"/>
</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-10-06T01:26:49.462697" elapsed="0.361693"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:26:49.825106" level="INFO">Executing command 'sudo ovs-vsctl set-manager   tcp:10.30.171.109:6640  tcp:10.30.171.171:6640  tcp:10.30.170.97:6640'.</msg>
<msg time="2026-10-06T01:26:49.868030" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:26:49.868266" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:26:49.868352" level="INFO">${stderr} = </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-10-06T01:26:49.824812" elapsed="0.043587"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:49.868811" elapsed="0.000437"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:49.870385" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:49.869802" elapsed="0.000670"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:49.870933" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:49.870659" elapsed="0.000378"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:49.870608" elapsed="0.000478"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:26:49.871371" elapsed="0.000054"/>
</return>
<status status="PASS" start="2026-10-06T01:26:49.871193" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:49.871162" elapsed="0.000382"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:49.871639" elapsed="0.000030"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:49.873292" elapsed="0.000691"/>
</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-10-06T01:26:49.874391" elapsed="0.000368"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:49.875073" elapsed="0.000195"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:49.872329" elapsed="0.003049"/>
</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-10-06T01:26:49.459158" elapsed="0.416372"/>
</kw>
<msg time="2026-10-06T01:26:49.875801" 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-10-06T01:26:49.458108" elapsed="0.417894"/>
</kw>
<arg>${tools_system}</arg>
<arg>sudo ovs-vsctl set-manager ${ovs_opt}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:26:49.457454" elapsed="0.418714"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify OVS Reports Connected" owner="OVSDB">
<kw name="Verify Ovs-vsctl Output" owner="OVSDB">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:49.888727" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:49.888362" elapsed="0.000443"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:49.888336" elapsed="0.000500"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:49.889271" 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-10-06T01:26:49.889400" 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-10-06T01:26:49.889100" elapsed="0.000334"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:49.890162" level="INFO">Attempting to execute command "sudo ovs-vsctl show" on remote system "10.30.170.234" 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-10-06T01:26:49.889727" elapsed="0.000493"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:49.890914" level="INFO">${conn_id} = 409</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-10-06T01:26:49.890461" elapsed="0.000487"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:26:49.892096" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:26:49.892192" 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-10-06T01:26:49.891740" elapsed="0.000482"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:49.892425" elapsed="0.000439"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:26:49.894213" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:26:50.330784" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:26:22 UTC 2026

  System load:  0.09               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:26:49 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:26:49.893610" elapsed="0.437310"/>
</kw>
<msg time="2026-10-06T01:26:50.330991" 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-10-06T01:26:49.893088" elapsed="0.437973"/>
</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-10-06T01:26:49.891215" elapsed="0.439938"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:26:50.331604" level="INFO">Executing command 'sudo ovs-vsctl show'.</msg>
<msg time="2026-10-06T01:26:50.354328" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:26:50.354563" level="INFO">${stdout} = 9fdd0147-e5ce-4fdc-a62e-949b33770316
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    ovs_version: "2.17.11"</msg>
<msg time="2026-10-06T01:26:50.354714" level="INFO">${stderr} = </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-10-06T01:26:50.331389" elapsed="0.023377"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:50.355112" elapsed="0.000428"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:50.356375" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:50.356013" elapsed="0.000414"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:50.356717" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:50.356530" elapsed="0.000254"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:50.356498" elapsed="0.000317"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:26:50.356997" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:26:50.356883" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:50.356863" elapsed="0.000241"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:50.357211" elapsed="0.000022"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:50.358242" elapsed="0.000416"/>
</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-10-06T01:26:50.358931" elapsed="0.000198"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:50.359323" elapsed="0.000128"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:50.357649" elapsed="0.001866"/>
</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-10-06T01:26:49.887734" elapsed="0.471894"/>
</kw>
<msg time="2026-10-06T01:26:50.359715" 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-10-06T01:26:49.886464" elapsed="0.473317"/>
</kw>
<msg time="2026-10-06T01:26:50.359920" level="INFO">${output} = 9fdd0147-e5ce-4fdc-a62e-949b33770316
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    ovs_version: "2.17.11"</msg>
<var>${output}</var>
<arg>${ovs_system}</arg>
<arg>sudo ovs-vsctl ${vsctl_args}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:26:49.885452" elapsed="0.474501"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:50.360525" level="INFO">9fdd0147-e5ce-4fdc-a62e-949b33770316
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    ovs_version: "2.17.11"</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:50.360216" elapsed="0.000384"/>
</kw>
<if>
<branch type="IF" condition="&quot;${should_match}&quot; == &quot;True&quot;">
<kw name="Should Contain" owner="BuiltIn">
<msg time="2026-10-06T01:26:50.361466" level="FAIL">'9fdd0147-e5ce-4fdc-a62e-949b33770316
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    ovs_version: "2.17.11"' does not contain 'is_connected'</msg>
<arg>${output}</arg>
<arg>${expected_output}</arg>
<doc>Fails if the `container` does not contain the `item` one or more times.</doc>
<status status="FAIL" start="2026-10-06T01:26:50.360994" elapsed="0.000592">'9fdd0147-e5ce-4fdc-a62e-949b33770316
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    ovs_version: "2.17.11"' does not contain 'is_connected'</status>
</kw>
<status status="FAIL" start="2026-10-06T01:26:50.360705" elapsed="0.000998">'9fdd0147-e5ce-4fdc-a62e-949b33770316
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    ovs_version: "2.17.11"' does not contain 'is_connected'</status>
</branch>
<status status="FAIL" start="2026-10-06T01:26:50.360663" elapsed="0.001086">'9fdd0147-e5ce-4fdc-a62e-949b33770316
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    ovs_version: "2.17.11"' does not contain 'is_connected'</status>
</if>
<if>
<branch type="IF" condition="&quot;${should_match}&quot; == &quot;False&quot;">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${output}</arg>
<arg>${expected_output}</arg>
<doc>Fails if the `container` contains the `item`.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:50.362052" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:50.361839" elapsed="0.000284"/>
</branch>
<status status="NOT RUN" start="2026-10-06T01:26:50.361816" elapsed="0.000340"/>
</if>
<return>
<value>${output}</value>
<status status="NOT RUN" start="2026-10-06T01:26:50.362197" elapsed="0.000019"/>
</return>
<var>${output}</var>
<arg>show</arg>
<arg>is_connected</arg>
<arg>${tools_system}</arg>
<doc>A wrapper keyword to make it easier to validate ovs-vsctl output, and gives an easy
way to check this output in a WUKS. The argument ${should_match} can control if the match should
exist (True} or not (False) or don't care (anything but True or False). ${should_match} is True by default</doc>
<status status="FAIL" start="2026-10-06T01:26:49.884517" elapsed="0.477818">'9fdd0147-e5ce-4fdc-a62e-949b33770316
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    ovs_version: "2.17.11"' does not contain 'is_connected'</status>
</kw>
<return>
<value>${output}</value>
<status status="NOT RUN" start="2026-10-06T01:26:50.362412" elapsed="0.000021"/>
</return>
<arg>${tools_system}</arg>
<doc>Uses "vsctl show" to check for string "is_connected"</doc>
<status status="FAIL" start="2026-10-06T01:26:49.877664" elapsed="0.484871">'9fdd0147-e5ce-4fdc-a62e-949b33770316
    Manager "tcp:10.30.171.171:6640"
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    ovs_version: "2.17.11"' does not contain 'is_connected'</status>
</kw>
<kw name="Verify OVS Reports Connected" owner="OVSDB">
<kw name="Verify Ovs-vsctl Output" owner="OVSDB">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:51.375843" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:51.375168" elapsed="0.000816"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:51.375111" elapsed="0.000930"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:51.376849" 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-10-06T01:26:51.377076" 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-10-06T01:26:51.376472" elapsed="0.000659"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:51.378250" level="INFO">Attempting to execute command "sudo ovs-vsctl show" on remote system "10.30.170.234" 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-10-06T01:26:51.377547" elapsed="0.000911"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:26:51.379787" level="INFO">${conn_id} = 411</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-10-06T01:26:51.379053" elapsed="0.000789"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:26:51.382272" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:26:51.382431" 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-10-06T01:26:51.381643" elapsed="0.000836"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:51.382869" elapsed="0.000649"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:26:51.385780" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:26:51.793640" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:26:22 UTC 2026

  System load:  0.09               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:26:50 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:26:51.384800" elapsed="0.408983"/>
</kw>
<msg time="2026-10-06T01:26:51.793853" 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-10-06T01:26:51.383938" elapsed="0.409989"/>
</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-10-06T01:26:51.380273" elapsed="0.413743"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:26:51.794433" level="INFO">Executing command 'sudo ovs-vsctl show'.</msg>
<msg time="2026-10-06T01:26:51.838024" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:26:51.838253" level="INFO">${stdout} = 9fdd0147-e5ce-4fdc-a62e-949b33770316
    Manager "tcp:10.30.171.171:6640"
        is_connected: true
    Manager "tcp:10.30.170.97:6640"
        is_connected: true
    Manager "tcp:10.30.171.109:6640"...</msg>
<msg time="2026-10-06T01:26:51.838344" level="INFO">${stderr} = </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-10-06T01:26:51.794248" elapsed="0.044143"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:51.838799" elapsed="0.000424"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:51.840303" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:51.839759" elapsed="0.000628"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:51.840829" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:26:51.840544" elapsed="0.000386"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:51.840497" elapsed="0.000482"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:26:51.841268" elapsed="0.000054"/>
</return>
<status status="PASS" start="2026-10-06T01:26:51.841088" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:51.841057" elapsed="0.000379"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:26:51.841503" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:26:51.843159" elapsed="0.000681"/>
</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-10-06T01:26:51.844243" elapsed="0.000309"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:26:51.844915" elapsed="0.000197"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:26:51.842209" elapsed="0.003006"/>
</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-10-06T01:26:51.374093" elapsed="0.471273"/>
</kw>
<msg time="2026-10-06T01:26:51.845473" 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-10-06T01:26:51.372473" elapsed="0.473123"/>
</kw>
<msg time="2026-10-06T01:26:51.845948" level="INFO">${output} = 9fdd0147-e5ce-4fdc-a62e-949b33770316
    Manager "tcp:10.30.171.171:6640"
        is_connected: true
    Manager "tcp:10.30.170.97:6640"
        is_connected: true
    Manager "tcp:10.30.171.109:6640"...</msg>
<var>${output}</var>
<arg>${ovs_system}</arg>
<arg>sudo ovs-vsctl ${vsctl_args}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:26:51.371413" elapsed="0.474589"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:51.846988" level="INFO">9fdd0147-e5ce-4fdc-a62e-949b33770316
    Manager "tcp:10.30.171.171:6640"
        is_connected: true
    Manager "tcp:10.30.170.97:6640"
        is_connected: true
    Manager "tcp:10.30.171.109:6640"
        is_connected: true
    ovs_version: "2.17.11"</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:51.846426" elapsed="0.000657"/>
</kw>
<if>
<branch type="IF" condition="&quot;${should_match}&quot; == &quot;True&quot;">
<kw name="Should Contain" owner="BuiltIn">
<arg>${output}</arg>
<arg>${expected_output}</arg>
<doc>Fails if the `container` does not contain the `item` one or more times.</doc>
<status status="PASS" start="2026-10-06T01:26:51.847724" elapsed="0.000647"/>
</kw>
<status status="PASS" start="2026-10-06T01:26:51.847217" elapsed="0.001233"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:51.847180" elapsed="0.001321"/>
</if>
<if>
<branch type="IF" condition="&quot;${should_match}&quot; == &quot;False&quot;">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${output}</arg>
<arg>${expected_output}</arg>
<doc>Fails if the `container` contains the `item`.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:51.849111" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:51.848636" elapsed="0.000589"/>
</branch>
<status status="PASS" start="2026-10-06T01:26:51.848601" elapsed="0.000673"/>
</if>
<return>
<value>${output}</value>
<status status="PASS" start="2026-10-06T01:26:51.849341" elapsed="0.000055"/>
</return>
<msg time="2026-10-06T01:26:51.849637" level="INFO">${output} = 9fdd0147-e5ce-4fdc-a62e-949b33770316
    Manager "tcp:10.30.171.171:6640"
        is_connected: true
    Manager "tcp:10.30.170.97:6640"
        is_connected: true
    Manager "tcp:10.30.171.109:6640"...</msg>
<var>${output}</var>
<arg>show</arg>
<arg>is_connected</arg>
<arg>${tools_system}</arg>
<doc>A wrapper keyword to make it easier to validate ovs-vsctl output, and gives an easy
way to check this output in a WUKS. The argument ${should_match} can control if the match should
exist (True} or not (False) or don't care (anything but True or False). ${should_match} is True by default</doc>
<status status="PASS" start="2026-10-06T01:26:51.370344" elapsed="0.479376"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-10-06T01:26:51.849823" elapsed="0.000053"/>
</return>
<arg>${tools_system}</arg>
<doc>Uses "vsctl show" to check for string "is_connected"</doc>
<status status="PASS" start="2026-10-06T01:26:51.363428" elapsed="0.486606"/>
</kw>
<msg time="2026-10-06T01:26:51.850191" level="INFO">${output} = 9fdd0147-e5ce-4fdc-a62e-949b33770316
    Manager "tcp:10.30.171.171:6640"
        is_connected: true
    Manager "tcp:10.30.170.97:6640"
        is_connected: true
    Manager "tcp:10.30.171.109:6640"...</msg>
<var>${output}</var>
<arg>5s</arg>
<arg>1s</arg>
<arg>Verify OVS Reports Connected</arg>
<arg>${tools_system}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:26:49.876563" elapsed="1.973680"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:26:51.851217" level="INFO">9fdd0147-e5ce-4fdc-a62e-949b33770316
    Manager "tcp:10.30.171.171:6640"
        is_connected: true
    Manager "tcp:10.30.170.97:6640"
        is_connected: true
    Manager "tcp:10.30.171.109:6640"
        is_connected: true
    ovs_version: "2.17.11"</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:26:51.850724" elapsed="0.000586"/>
</kw>
<kw name="Get From List" owner="Collections">
<msg time="2026-10-06T01:26:51.852061" level="INFO">${controller_index} = 1</msg>
<var>${controller_index}</var>
<arg>${index_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="PASS" start="2026-10-06T01:26:51.851702" elapsed="0.000412"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:51.853970" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:26:51.853314" elapsed="0.000711"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:26:51.854113" elapsed="0.000058"/>
</return>
<msg time="2026-10-06T01:26:51.854379" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${controller_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:26:51.852543" elapsed="0.001886"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:51.861073" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:51.860471" elapsed="0.000635"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:51.874861" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:26:51.875260" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Mon, 05-Oct-2026 01:26:51 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:26:51.875876" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:26:51.861320" elapsed="0.014615"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:51.879363" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:26:51.878167" elapsed="0.001603">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:26:51.877509" elapsed="0.002571">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:51.880628" elapsed="0.000079"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:51.880218" elapsed="0.000567"/>
</branch>
<status status="FAIL" start="2026-10-06T01:26:51.877467" elapsed="0.003371">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:51.881340" elapsed="0.000044"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:26:51.881517" elapsed="0.000038"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:26:51.876523" elapsed="0.005348">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:26:51.882386" elapsed="0.000051"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:51.882837" elapsed="0.000046"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:51.883221" elapsed="0.000041"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:51.883608" elapsed="0.000043"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:51.884090" elapsed="0.000042"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:51.884738" elapsed="0.000046"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:51.885131" elapsed="0.000054"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:51.885536" elapsed="0.000065"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:51.885974" elapsed="0.000042"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:51.886427" elapsed="0.000041"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:26:51.884397" elapsed="0.002146"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:26:51.884235" elapsed="0.002391"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:26:51.886736" elapsed="0.000033"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:26:51.859545" elapsed="0.027449">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:53.893534" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:53.892805" elapsed="0.000824"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:53.903949" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:26:53.904342" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:26:53.904667" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:26:53.894025" elapsed="0.010730"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:53.908114" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:26:53.906905" elapsed="0.001638">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:26:53.906253" elapsed="0.002612">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:53.909342" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:53.909007" elapsed="0.000451"/>
</branch>
<status status="FAIL" start="2026-10-06T01:26:53.906207" elapsed="0.003373">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:53.910115" elapsed="0.000045"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:26:53.910246" elapsed="0.000036"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:26:53.905336" elapsed="0.005181">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:26:53.911070" elapsed="0.000051"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:53.911507" elapsed="0.000068"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:53.911955" elapsed="0.000043"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:53.912318" elapsed="0.000040"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:53.912846" elapsed="0.000046"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:53.913445" elapsed="0.000041"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:53.913883" elapsed="0.000538"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:53.914841" elapsed="0.000047"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:53.915233" elapsed="0.000042"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:53.915747" elapsed="0.000045"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:26:53.913160" elapsed="0.002711"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:26:53.912998" elapsed="0.002929"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:26:53.916006" elapsed="0.000032"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:26:53.891623" elapsed="0.024645">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:55.922663" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:55.921892" elapsed="0.000911"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:55.935065" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:26:55.935470" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:26:55.935947" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:26:55.923280" elapsed="0.012725"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:55.939423" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:26:55.938192" elapsed="0.001649">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:26:55.937560" elapsed="0.002591">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:55.940651" elapsed="0.000074"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:55.940296" elapsed="0.000504"/>
</branch>
<status status="FAIL" start="2026-10-06T01:26:55.937489" elapsed="0.003361">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:55.941348" elapsed="0.000045"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:26:55.941528" elapsed="0.000206"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:26:55.936630" elapsed="0.005349">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:26:55.942488" elapsed="0.000071"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:55.942922" elapsed="0.000044"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:55.943301" elapsed="0.000042"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:55.943709" elapsed="0.000045"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:55.944166" elapsed="0.000042"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:55.944821" elapsed="0.000045"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:55.945209" elapsed="0.000041"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:55.945612" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:55.946024" elapsed="0.000041"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:55.946481" elapsed="0.000044"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:26:55.944481" elapsed="0.002143"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:26:55.944316" elapsed="0.002390"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:26:55.946788" elapsed="0.000032"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:26:55.920730" elapsed="0.026319">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:57.953392" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:57.952638" elapsed="0.000820"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:57.964244" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:26:57.964655" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:26:57.964981" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:26:57.953882" elapsed="0.011154"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:57.968374" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:26:57.967179" elapsed="0.001662">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:26:57.966557" elapsed="0.002540">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:57.970057" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:57.969719" elapsed="0.000458"/>
</branch>
<status status="FAIL" start="2026-10-06T01:26:57.966479" elapsed="0.003808">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:57.970854" elapsed="0.000047"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:26:57.970990" elapsed="0.000036"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:26:57.965638" elapsed="0.005625">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:26:57.971823" elapsed="0.000051"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:57.972267" elapsed="0.000045"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:57.972673" elapsed="0.000070"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:57.973069" elapsed="0.000041"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:57.973514" elapsed="0.000063"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:57.974166" elapsed="0.000041"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:57.974577" elapsed="0.000044"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:57.975000" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:57.975380" elapsed="0.000041"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:26:57.975926" elapsed="0.000059"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:26:57.973873" elapsed="0.002221"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:26:57.973706" elapsed="0.002462"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:26:57.976282" elapsed="0.000047"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:26:57.951480" elapsed="0.025130">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:26:59.983200" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:26:59.982348" elapsed="0.000923"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:26:59.994465" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:26:59.994996" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:26:59.995527" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:26:59.983660" elapsed="0.011929"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:26:59.999049" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:26:59.997825" elapsed="0.001561">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:26:59.997147" elapsed="0.002640">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:00.000276" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:26:59.999937" elapsed="0.000456"/>
</branch>
<status status="FAIL" start="2026-10-06T01:26:59.997098" elapsed="0.003347">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:00.001008" elapsed="0.000047"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:27:00.001192" elapsed="0.000040"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:26:59.996213" elapsed="0.005259">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:27:00.002076" elapsed="0.000053"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:00.002464" elapsed="0.000068"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:00.002903" elapsed="0.000044"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:00.003269" elapsed="0.000042"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:00.003782" elapsed="0.000046"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:00.004385" elapsed="0.000041"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:00.004910" elapsed="0.000059"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:00.005359" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:00.005817" elapsed="0.000044"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:00.006276" elapsed="0.000041"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:27:00.004096" elapsed="0.002296"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:27:00.003933" elapsed="0.002515"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:27:00.006567" elapsed="0.000042"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:26:59.981169" elapsed="0.025769">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:02.013734" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:02.012973" elapsed="0.000829"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:02.025341" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:02.025801" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:27:02.026117" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:02.014159" elapsed="0.012013"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:02.029560" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:27:02.028305" elapsed="0.001703">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:27:02.027712" elapsed="0.002549">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:02.030788" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:02.030399" elapsed="0.000510"/>
</branch>
<status status="FAIL" start="2026-10-06T01:27:02.027637" elapsed="0.003369">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:02.031536" elapsed="0.000045"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:27:02.031668" elapsed="0.000063"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:27:02.026802" elapsed="0.005165">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:27:02.032471" elapsed="0.000076"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:02.032961" elapsed="0.000046"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:02.033341" elapsed="0.000041"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:02.033748" elapsed="0.000044"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:02.034197" elapsed="0.000042"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:02.034828" elapsed="0.000043"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:02.035213" elapsed="0.000040"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:02.035616" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:02.036025" elapsed="0.000042"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:02.036477" elapsed="0.000072"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:27:02.034511" elapsed="0.002116"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:27:02.034337" elapsed="0.002375"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:27:02.036794" elapsed="0.000031"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:27:02.011844" elapsed="0.025206">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:04.043254" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:04.042511" elapsed="0.000812"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:04.054153" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:04.054575" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:27:04.055001" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:04.043736" elapsed="0.011321"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:04.058386" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:27:04.057190" elapsed="0.001595">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:27:04.056570" elapsed="0.002527">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:04.059599" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:04.059242" elapsed="0.000504"/>
</branch>
<status status="FAIL" start="2026-10-06T01:27:04.056522" elapsed="0.003275">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:04.060293" elapsed="0.000044"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:27:04.060495" elapsed="0.000039"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:27:04.055655" elapsed="0.005147">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:27:04.061308" elapsed="0.000050"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:04.061738" elapsed="0.000045"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:04.062123" elapsed="0.000041"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:04.062507" elapsed="0.000042"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:04.062989" elapsed="0.000044"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:04.063655" elapsed="0.000069"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:04.064072" elapsed="0.000041"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:04.064460" elapsed="0.003547"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:04.068421" elapsed="0.000047"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:04.068956" elapsed="0.000046"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:27:04.063290" elapsed="0.005791"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:27:04.063135" elapsed="0.006003"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:27:04.069220" elapsed="0.000032"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:27:04.041381" elapsed="0.028128">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:06.075850" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:06.075070" elapsed="0.000850"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:06.086091" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:06.086514" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:27:06.086844" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:06.076283" elapsed="0.010618"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:06.090297" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:27:06.089089" elapsed="0.001683">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:27:06.088430" elapsed="0.002600">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:06.091534" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:06.091171" elapsed="0.000483"/>
</branch>
<status status="FAIL" start="2026-10-06T01:27:06.088381" elapsed="0.003403">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:06.092321" elapsed="0.000044"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:27:06.092451" elapsed="0.000054"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:27:06.087529" elapsed="0.005244">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:27:06.093280" elapsed="0.000052"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:06.093777" elapsed="0.000048"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:06.094172" elapsed="0.000044"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:06.094564" elapsed="0.000042"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:06.095060" elapsed="0.000043"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:06.095702" elapsed="0.000045"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:06.096099" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:06.096510" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:06.096928" elapsed="0.000043"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:06.097397" elapsed="0.000040"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:27:06.095363" elapsed="0.002175"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:27:06.095205" elapsed="0.002390"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:27:06.097675" elapsed="0.000060"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:27:06.073925" elapsed="0.024039">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:08.104241" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:08.103475" elapsed="0.000834"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:08.114867" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:08.115255" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:27:08.115711" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:08.104765" elapsed="0.011005"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:08.119185" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:27:08.117962" elapsed="0.001593">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:27:08.117293" elapsed="0.002594">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:08.120389" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:08.120033" elapsed="0.000499"/>
</branch>
<status status="FAIL" start="2026-10-06T01:27:08.117245" elapsed="0.003337">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:08.121137" elapsed="0.000044"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:27:08.121323" elapsed="0.000038"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:27:08.116362" elapsed="0.005260">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:27:08.122165" elapsed="0.000050"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:08.122575" elapsed="0.000534"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:08.123500" elapsed="0.000046"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:08.123910" elapsed="0.000044"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:08.124384" elapsed="0.000054"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:08.125074" elapsed="0.000042"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:08.125486" elapsed="0.000044"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:08.125910" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:08.126299" elapsed="0.000041"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:08.126815" elapsed="0.000045"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:27:08.124773" elapsed="0.002163"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:27:08.124577" elapsed="0.002416"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:27:08.127075" elapsed="0.000031"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:27:08.102303" elapsed="0.025033">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:10.133756" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:10.132984" elapsed="0.000840"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:10.144232" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:10.144761" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:27:10.145069" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:10.134186" elapsed="0.010938"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:10.148709" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:27:10.147370" elapsed="0.001762">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:27:10.146748" elapsed="0.002641">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:10.149929" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:10.149556" elapsed="0.000491"/>
</branch>
<status status="FAIL" start="2026-10-06T01:27:10.146668" elapsed="0.003478">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:10.150729" elapsed="0.000047"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:27:10.150864" elapsed="0.000035"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:27:10.145784" elapsed="0.005364">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:27:10.151721" elapsed="0.000054"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:10.152169" elapsed="0.000045"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:10.152579" elapsed="0.000042"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:10.152978" elapsed="0.000042"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:10.153470" elapsed="0.000042"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:10.154098" elapsed="0.000041"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:10.154508" elapsed="0.000051"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:10.154987" elapsed="0.000047"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:10.155380" elapsed="0.000043"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:10.155944" elapsed="0.000046"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:27:10.153801" elapsed="0.002270"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:27:10.153615" elapsed="0.002512"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:27:10.156207" elapsed="0.000030"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:27:10.131840" elapsed="0.024644">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:12.163447" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:12.162556" elapsed="0.000981"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:12.174171" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:12.174637" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:27:12.175068" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:12.163977" elapsed="0.011149"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:12.179461" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:27:12.177513" elapsed="0.002328">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:27:12.176776" elapsed="0.003395">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:12.180716" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:12.180316" elapsed="0.000525"/>
</branch>
<status status="FAIL" start="2026-10-06T01:27:12.176713" elapsed="0.004180">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:12.181439" elapsed="0.000053"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:27:12.181639" elapsed="0.000074"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:27:12.175769" elapsed="0.006193">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:27:12.182500" elapsed="0.000052"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:12.182924" elapsed="0.000045"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:12.183314" elapsed="0.000041"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:12.183746" elapsed="0.000044"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:12.184220" elapsed="0.000042"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:12.184875" elapsed="0.000044"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:12.185264" elapsed="0.000040"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:12.185826" elapsed="0.000058"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:12.186269" elapsed="0.000042"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:12.186789" elapsed="0.000044"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:27:12.184549" elapsed="0.002360"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:27:12.184360" elapsed="0.002608"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:27:12.187049" elapsed="0.000031"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:27:12.161272" elapsed="0.026040">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:14.194734" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:14.193815" elapsed="0.001000"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:14.204458" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:14.204986" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:27:14.205345" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:14.195209" elapsed="0.010242"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:14.209761" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:27:14.208210" elapsed="0.002025">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:27:14.207428" elapsed="0.003152">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:14.211192" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:14.210813" elapsed="0.000521"/>
</branch>
<status status="FAIL" start="2026-10-06T01:27:14.207348" elapsed="0.004141">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:14.212130" elapsed="0.000053"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:27:14.212275" elapsed="0.000037"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:27:14.206191" elapsed="0.006437">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:27:14.213270" elapsed="0.000054"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:14.213857" elapsed="0.000052"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:14.214329" elapsed="0.000049"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:14.214886" elapsed="0.000050"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:14.215436" elapsed="0.000062"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:14.216172" elapsed="0.000048"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:14.216674" elapsed="0.000082"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:14.217173" elapsed="0.000050"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:14.217671" elapsed="0.000088"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:14.218255" elapsed="0.000047"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:27:14.215808" elapsed="0.002577"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:27:14.215611" elapsed="0.002884"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:27:14.218612" elapsed="0.000036"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:27:14.192384" elapsed="0.026537">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:16.225811" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:16.224998" elapsed="0.000881"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:16.236239" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:16.236651" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:27:16.237097" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:16.226241" elapsed="0.010912"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:16.240599" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:27:16.239319" elapsed="0.001644">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:27:16.238712" elapsed="0.002560">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:16.241812" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:16.241441" elapsed="0.000491"/>
</branch>
<status status="FAIL" start="2026-10-06T01:27:16.238637" elapsed="0.003345">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:16.242515" elapsed="0.000045"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:27:16.242725" elapsed="0.000039"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:27:16.237791" elapsed="0.005213">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:27:16.243538" elapsed="0.000051"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:16.243957" elapsed="0.000043"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:16.244341" elapsed="0.000063"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:16.244764" elapsed="0.000043"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:16.245236" elapsed="0.000042"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:16.245883" elapsed="0.000043"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:16.246271" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:16.246819" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:16.247203" elapsed="0.000040"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:16.247785" elapsed="0.000047"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:27:16.245561" elapsed="0.002349"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:27:16.245399" elapsed="0.002566"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:27:16.248045" elapsed="0.000031"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:27:16.223817" elapsed="0.024485">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:18.254600" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:18.253870" elapsed="0.000793"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:18.264425" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:18.264867" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:27:18.265165" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:18.255056" elapsed="0.010163"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:18.268657" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:27:18.267411" elapsed="0.001691">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:27:18.266794" elapsed="0.002562">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:18.269888" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:18.269519" elapsed="0.000488"/>
</branch>
<status status="FAIL" start="2026-10-06T01:27:18.266746" elapsed="0.003358">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:18.270632" elapsed="0.000071"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:27:18.270793" elapsed="0.000036"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:27:18.265850" elapsed="0.005212">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:27:18.271647" elapsed="0.000078"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:18.272114" elapsed="0.000044"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:18.272527" elapsed="0.000042"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:18.272922" elapsed="0.000042"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:18.273393" elapsed="0.000042"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:18.274015" elapsed="0.000041"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:18.274422" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:18.274837" elapsed="0.000483"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:18.275736" elapsed="0.000046"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:18.276203" elapsed="0.000042"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:27:18.273724" elapsed="0.002599"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:27:18.273539" elapsed="0.002864"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:27:18.276486" elapsed="0.000033"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:27:18.252761" elapsed="0.024018">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:20.283052" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:20.282230" elapsed="0.000889"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:20.294376" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:20.294793" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:27:20.295184" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:20.283509" elapsed="0.011732"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:20.298657" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:27:20.297452" elapsed="0.001562">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:27:20.296841" elapsed="0.002474">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:20.299862" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:20.299481" elapsed="0.000501"/>
</branch>
<status status="FAIL" start="2026-10-06T01:27:20.296794" elapsed="0.003238">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:20.300549" elapsed="0.000046"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:27:20.300762" elapsed="0.000040"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:27:20.295876" elapsed="0.005162">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:27:20.301568" elapsed="0.000051"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:20.301996" elapsed="0.000042"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:20.302394" elapsed="0.000043"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:20.302791" elapsed="0.000042"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:20.303297" elapsed="0.000074"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:20.304013" elapsed="0.000045"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:20.304452" elapsed="0.000050"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:20.304891" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:20.305278" elapsed="0.000042"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:20.305826" elapsed="0.000043"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:27:20.303709" elapsed="0.002237"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:27:20.303500" elapsed="0.002500"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:27:20.306078" elapsed="0.000031"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:27:20.281114" elapsed="0.025221">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:22.312585" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:22.311858" elapsed="0.000790"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:22.322800" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:22.323229" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:27:22.323557" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:22.313082" elapsed="0.010531"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:22.327072" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:27:22.325850" elapsed="0.001670">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:27:22.325192" elapsed="0.002616">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.328293" elapsed="0.000550"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:22.327952" elapsed="0.000971"/>
</branch>
<status status="FAIL" start="2026-10-06T01:27:22.325144" elapsed="0.003886">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.329586" elapsed="0.000048"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:27:22.329753" elapsed="0.000044"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:27:22.324221" elapsed="0.005813">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.330566" elapsed="0.000051"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.331048" elapsed="0.000044"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.331449" elapsed="0.000042"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.331841" elapsed="0.000042"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.332288" elapsed="0.000061"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.332924" elapsed="0.000043"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.333381" elapsed="0.000048"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.333815" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.334198" elapsed="0.000041"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.334675" elapsed="0.000069"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:27:22.332606" elapsed="0.002216"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:27:22.332451" elapsed="0.002426"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:27:22.334958" elapsed="0.000031"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:27:22.310764" elapsed="0.024451">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<msg time="2026-10-06T01:27:22.335541" level="FAIL">Keyword 'OVSDB.Get OVSDB UUID' failed after retrying for 30 seconds. The last error was: Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${ovsdb_uuid}</var>
<arg>30s</arg>
<arg>2s</arg>
<arg>OVSDB.Get OVSDB UUID</arg>
<arg>controller_http_session=${session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-10-06T01:26:51.854863" elapsed="30.481077">Keyword 'OVSDB.Get OVSDB UUID' failed after retrying for 30 seconds. The last error was: Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interfa...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<return>
<value>${ovsdb_uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:27:22.336143" elapsed="0.000033"/>
</return>
<var>${ovsdb_uuid}</var>
<doc>Connect OVS to the list of controllers in the ${controller_index_list} or all if no list is provided.</doc>
<status status="FAIL" start="2026-10-06T01:26:47.406872" elapsed="34.929579">Keyword 'OVSDB.Get OVSDB UUID' failed after retrying for 30 seconds. The last error was: Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interfa...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${ovsdb_uuid}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.337098" elapsed="0.000079"/>
</kw>
<doc>Connect OVS to all cluster instances.</doc>
<status status="FAIL" start="2026-10-06T01:26:47.031332" elapsed="35.306426">Keyword 'OVSDB.Get OVSDB UUID' failed after retrying for 30 seconds. The last error was: Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interfa...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</test>
<test id="s1-s2-s1-t3" name="Check Entity Owner Status And Find Owner and Candidate Before Fail" line="26">
<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-10-06T01:27:22.342006" elapsed="0.000552"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:22.341384" elapsed="0.001536"/>
</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-10-06T01:27:22.345136" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:22.344928" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.344887" elapsed="0.000394"/>
</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-10-06T01:27:22.350094" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:22.349905" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.349867" elapsed="0.000368"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:22.352314" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:22.351548" elapsed="0.000854"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:22.353459" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:22.352819" elapsed="0.000696"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:22.353606" elapsed="0.000065"/>
</return>
<msg time="2026-10-06T01:27:22.353929" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:22.350739" elapsed="0.003241"/>
</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-10-06T01:27:22.359995" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:22.359801" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.359761" elapsed="0.000375"/>
</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-10-06T01:27:22.362820" elapsed="0.000044"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:22.362543" elapsed="0.000389"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.362506" elapsed="0.000473"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:22.363918" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:22.363303" elapsed="0.000673"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:22.364959" 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-10-06T01:27:22.364473" elapsed="0.000542"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:22.398375" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:22.366502" elapsed="0.032118"/>
</kw>
<msg time="2026-10-06T01:27:22.398876" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:22.398935" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:22.365386" elapsed="0.033599"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:22.493785" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:22.399854" elapsed="0.094121"/>
</kw>
<msg time="2026-10-06T01:27:22.494132" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:22.494174" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:22.399213" elapsed="0.094995"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.494505" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:22.494280" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.494261" elapsed="0.000339"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:22.495146" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:22.494802" elapsed="0.000435"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.495512" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:22.495299" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.495283" elapsed="0.000322"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:22.495636" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:22.498223" elapsed="0.000519"/>
</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-10-06T01:27:22.500005" elapsed="0.000495"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:22.501916" elapsed="0.000314"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:22.496512" elapsed="0.005786"/>
</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-10-06T01:27:22.495945" elapsed="0.006488"/>
</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="PASS" start="2026-10-06T01:27:22.361939" elapsed="0.140571"/>
</kw>
<msg time="2026-10-06T01:27:22.502597" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:22.502637" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:22.360496" elapsed="0.142175"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:22.502841" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:22.502757" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.502740" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:22.503278" elapsed="0.000025"/>
</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-10-06T01:27:22.503600" elapsed="0.000056"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:22.503793" 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="PASS" start="2026-10-06T01:27:22.359084" elapsed="0.144800"/>
</kw>
<msg time="2026-10-06T01:27:22.503969" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:22.504010" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:22.354767" elapsed="0.149278"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.504357" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:22.504114" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.504098" elapsed="0.000341"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:22.354430" elapsed="0.150030"/>
</iter>
<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-10-06T01:27:22.507014" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:22.506929" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.506911" elapsed="0.000166"/>
</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-10-06T01:27:22.508178" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:22.508094" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.508077" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:22.508625" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:22.508399" elapsed="0.000250"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:22.509002" 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-10-06T01:27:22.508825" elapsed="0.000201"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:22.548006" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:22.509602" elapsed="0.038629"/>
</kw>
<msg time="2026-10-06T01:27:22.548438" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:22.548480" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:22.509177" elapsed="0.039338"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:22.647466" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:22.549229" elapsed="0.098438"/>
</kw>
<msg time="2026-10-06T01:27:22.647861" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:22.647903" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:22.548747" elapsed="0.099190"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.648259" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:22.648025" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.648001" elapsed="0.000371"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:22.648925" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:22.648554" elapsed="0.000462"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.649274" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:22.649078" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.649061" elapsed="0.000320"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:22.649415" elapsed="0.000036"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:22.652125" elapsed="0.000516"/>
</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-10-06T01:27:22.653935" elapsed="0.000493"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:22.655861" elapsed="0.000311"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:22.650392" elapsed="0.005847"/>
</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-10-06T01:27:22.649851" elapsed="0.006534"/>
</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="PASS" start="2026-10-06T01:27:22.507838" elapsed="0.148632"/>
</kw>
<msg time="2026-10-06T01:27:22.656556" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:22.656597" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:22.507224" elapsed="0.149408"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:22.656809" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:22.656722" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.656704" elapsed="0.000183"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.657216" elapsed="0.000024"/>
</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-10-06T01:27:22.657537" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:22.657602" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:22.506617" elapsed="0.151159"/>
</kw>
<msg time="2026-10-06T01:27:22.657866" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:22.657906" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:22.504730" elapsed="0.153210"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.658229" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:22.658011" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.657995" elapsed="0.000306"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:22.504574" elapsed="0.153748"/>
</iter>
<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-10-06T01:27:22.661063" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:22.660978" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.660961" elapsed="0.000165"/>
</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-10-06T01:27:22.662227" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:22.662143" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.662126" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:22.662720" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:22.662446" elapsed="0.000300"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:22.663089" 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-10-06T01:27:22.662909" elapsed="0.000203"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:22.697292" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:22.663714" elapsed="0.033770"/>
</kw>
<msg time="2026-10-06T01:27:22.697649" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:22.697712" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:22.663264" elapsed="0.034485"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:22.796051" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:22.698349" elapsed="0.098032"/>
</kw>
<msg time="2026-10-06T01:27:22.796575" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:22.796617" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:22.697912" elapsed="0.098741"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.797024" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:22.796766" elapsed="0.000331"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.796739" elapsed="0.000382"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:22.797716" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:22.797302" elapsed="0.000506"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.798066" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:22.797869" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.797852" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:22.798193" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:22.800787" elapsed="0.000480"/>
</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-10-06T01:27:22.802510" elapsed="0.000513"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:22.804414" elapsed="0.000334"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:22.799061" elapsed="0.005756"/>
</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-10-06T01:27:22.798522" elapsed="0.006410"/>
</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="PASS" start="2026-10-06T01:27:22.661887" elapsed="0.143122"/>
</kw>
<msg time="2026-10-06T01:27:22.805093" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:22.805133" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:22.661272" elapsed="0.143896"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:22.805372" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:27:22.805238" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.805221" elapsed="0.000232"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.805882" elapsed="0.000024"/>
</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-10-06T01:27:22.806193" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:22.806257" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:22.660665" elapsed="0.145692"/>
</kw>
<msg time="2026-10-06T01:27:22.806445" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:22.806484" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:22.658596" elapsed="0.147922"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.806826" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:22.806588" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.806572" elapsed="0.000327"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:22.658457" elapsed="0.148464"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:22.354088" elapsed="0.452865"/>
</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-10-06T01:27:22.349071" elapsed="0.457936"/>
</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-10-06T01:27:22.344243" elapsed="0.462854"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:22.343275" elapsed="0.463866"/>
</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-10-06T01:27:22.340311" elapsed="0.466884"/>
</kw>
<kw name="Get Ovsdb Entity Owner Status For One Device" owner="ClusterOvsdb">
<msg time="2026-10-06T01:27:22.811342" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<var>${original_owner}</var>
<var>${original_candidate_list}</var>
<arg>ovsdb://uuid/${ovsdb_uuid}</arg>
<arg>1</arg>
<doc>Check Entity Owner Status and identify owner and successors for an ovs device ${device}. Request is sent to controller ${controller_index}.</doc>
<status status="FAIL" start="2026-10-06T01:27:22.810108" elapsed="0.001270">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Get From List" owner="Collections">
<var>${original_candidate}</var>
<arg>${original_candidate_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.811553" elapsed="0.000021"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${original_owner}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.811773" elapsed="0.000019"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${original_candidate_list}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.811960" elapsed="0.000018"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${original_candidate}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.812143" elapsed="0.000018"/>
</kw>
<doc>Check Entity Owner Status and identify owner and candidate.</doc>
<status status="FAIL" start="2026-10-06T01:27:22.338795" elapsed="0.473491">Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s2-s1-t4" name="Create Bridge Manually and Verify Before Fail" line="36">
<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-10-06T01:27:22.814341" elapsed="0.000207"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:22.813982" elapsed="0.000710"/>
</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-10-06T01:27:22.815813" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:22.815726" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.815707" elapsed="0.000169"/>
</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-10-06T01:27:22.817765" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:22.817665" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.817647" elapsed="0.000181"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:22.818751" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:22.818405" elapsed="0.000372"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:22.819199" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:22.818928" elapsed="0.000295"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:22.819263" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:27:22.819405" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:22.818033" elapsed="0.001395"/>
</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-10-06T01:27:22.821956" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:22.821872" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.821855" elapsed="0.000164"/>
</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-10-06T01:27:22.823166" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:22.823064" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.823046" elapsed="0.000185"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:22.823632" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:22.823392" elapsed="0.000265"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:22.824022" 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-10-06T01:27:22.823837" elapsed="0.000210"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:22.857992" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:22.824657" elapsed="0.033524"/>
</kw>
<msg time="2026-10-06T01:27:22.858353" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:22.858395" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:22.824200" elapsed="0.034268"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:22.931775" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:22.859081" elapsed="0.072880"/>
</kw>
<msg time="2026-10-06T01:27:22.932118" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:22.932159" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:22.858637" elapsed="0.073558"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.932507" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:22.932266" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.932247" elapsed="0.000358"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:22.933174" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:22.932814" elapsed="0.000443"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.933536" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:22.933319" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.933302" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:22.933660" elapsed="0.000045"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:22.936158" elapsed="0.000513"/>
</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-10-06T01:27:22.937947" elapsed="0.000473"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:22.939606" elapsed="0.000353"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:22.934460" elapsed="0.005579"/>
</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-10-06T01:27:22.933954" elapsed="0.006205"/>
</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="PASS" start="2026-10-06T01:27:22.822805" elapsed="0.117432"/>
</kw>
<msg time="2026-10-06T01:27:22.940320" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:22.940395" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:22.822164" elapsed="0.118269"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:22.940589" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-10-06T01:27:22.940504" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.940486" elapsed="0.000467"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:22.941278" elapsed="0.000023"/>
</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-10-06T01:27:22.941592" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:22.941655" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:22.821568" elapsed="0.120189"/>
</kw>
<msg time="2026-10-06T01:27:22.941840" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:22.941879" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:22.819781" elapsed="0.122133"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:22.942206" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:22.941982" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.941966" elapsed="0.000346"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:22.819625" elapsed="0.122724"/>
</iter>
<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-10-06T01:27:22.944933" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:22.944848" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.944831" elapsed="0.000165"/>
</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-10-06T01:27:22.946098" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:22.946014" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:22.945997" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:22.946544" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:22.946304" elapsed="0.000265"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:22.946928" 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-10-06T01:27:22.946747" elapsed="0.000205"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:22.984084" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:22.947532" elapsed="0.036781"/>
</kw>
<msg time="2026-10-06T01:27:22.984536" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:22.984578" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:22.947104" elapsed="0.037509"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:23.064395" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:22.985306" elapsed="0.079281"/>
</kw>
<msg time="2026-10-06T01:27:23.064769" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:23.064811" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:22.984837" elapsed="0.080009"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:23.065160" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:23.064931" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.064907" elapsed="0.000350"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.065813" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:23.065453" elapsed="0.000445"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:23.066156" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:23.065959" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.065943" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:23.066281" elapsed="0.000034"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:23.068887" elapsed="0.000495"/>
</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-10-06T01:27:23.070637" elapsed="0.000491"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:23.072384" elapsed="0.000528"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:23.067151" elapsed="0.005832"/>
</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-10-06T01:27:23.066615" elapsed="0.006485"/>
</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="PASS" start="2026-10-06T01:27:22.945755" elapsed="0.127422"/>
</kw>
<msg time="2026-10-06T01:27:23.073318" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:23.073380" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:22.945143" elapsed="0.128274"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:23.073573" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:23.073488" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.073471" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:23.073996" elapsed="0.000024"/>
</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-10-06T01:27:23.074304" elapsed="0.000038"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:23.074385" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:22.944537" elapsed="0.129936"/>
</kw>
<msg time="2026-10-06T01:27:23.074560" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:23.074601" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:22.942604" elapsed="0.132032"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:23.075060" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:23.074840" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.074822" elapsed="0.000309"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:22.942462" elapsed="0.132691"/>
</iter>
<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-10-06T01:27:23.079255" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:23.079170" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.079151" elapsed="0.000167"/>
</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-10-06T01:27:23.080480" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:23.080348" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.080314" elapsed="0.000232"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:23.080946" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:23.080711" elapsed="0.000260"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:23.081309" 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-10-06T01:27:23.081132" elapsed="0.000261"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:23.113761" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:23.081980" elapsed="0.031974"/>
</kw>
<msg time="2026-10-06T01:27:23.114113" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:23.114155" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:23.081547" elapsed="0.032642"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:23.198018" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:23.114834" elapsed="0.083434"/>
</kw>
<msg time="2026-10-06T01:27:23.198485" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:23.198528" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:23.114378" elapsed="0.084186"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:23.198982" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:23.198667" elapsed="0.000388"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.198636" elapsed="0.000447"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.199766" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:23.199347" elapsed="0.000502"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:23.200107" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:23.199911" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.199894" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:23.200234" elapsed="0.000037"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:23.202901" elapsed="0.000496"/>
</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-10-06T01:27:23.204636" elapsed="0.000487"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:23.206491" elapsed="0.000325"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:23.201133" elapsed="0.005751"/>
</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-10-06T01:27:23.200578" elapsed="0.006423"/>
</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="PASS" start="2026-10-06T01:27:23.080074" elapsed="0.127006"/>
</kw>
<msg time="2026-10-06T01:27:23.207166" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:23.207206" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:23.079481" elapsed="0.127760"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:23.207413" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:23.207312" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.207295" elapsed="0.000196"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:23.207902" elapsed="0.000024"/>
</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-10-06T01:27:23.208209" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:23.208273" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:23.078867" elapsed="0.129508"/>
</kw>
<msg time="2026-10-06T01:27:23.208465" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:23.208505" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:23.075426" elapsed="0.133116"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:23.208851" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:23.208612" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.208596" elapsed="0.000327"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:23.075273" elapsed="0.133672"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:22.819481" elapsed="0.389496"/>
</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-10-06T01:27:22.817372" elapsed="0.391662"/>
</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-10-06T01:27:22.815449" elapsed="0.393640"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:22.814946" elapsed="0.394187"/>
</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-10-06T01:27:22.813626" elapsed="0.395559"/>
</kw>
<kw name="Create Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:23.212973" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:23.212697" elapsed="0.000360"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.212665" elapsed="0.000416"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:23.213428" 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-10-06T01:27:23.213528" 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-10-06T01:27:23.213281" elapsed="0.000271"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.214052" level="INFO">Attempting to execute command "sudo ovs-vsctl add-br br-s1" on remote system "10.30.170.234" 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-10-06T01:27:23.213762" elapsed="0.000332"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:23.214593" level="INFO">${conn_id} = 419</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-10-06T01:27:23.214272" elapsed="0.000345"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.215466" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:27:23.215536" 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-10-06T01:27:23.215183" elapsed="0.000376"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:23.215720" elapsed="0.000281"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:27:23.216803" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:27:23.825220" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:27:23 UTC 2026

  System load:  0.03               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:26:51 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:27:23.216556" elapsed="0.608883"/>
</kw>
<msg time="2026-10-06T01:27:23.825550" 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-10-06T01:27:23.216162" elapsed="0.609497"/>
</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-10-06T01:27:23.214825" elapsed="0.611003"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:27:23.826507" level="INFO">Executing command 'sudo ovs-vsctl add-br br-s1'.</msg>
<msg time="2026-10-06T01:27:23.880533" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:27:23.880826" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:27:23.880917" level="INFO">${stderr} = </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-10-06T01:27:23.826196" elapsed="0.054770"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:23.881349" elapsed="0.000470"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.882999" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:23.882385" elapsed="0.000700"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:27:23.883515" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:23.883248" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.883199" elapsed="0.000470"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:27:23.883994" elapsed="0.000054"/>
</return>
<status status="PASS" start="2026-10-06T01:27:23.883812" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.883781" elapsed="0.000381"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:27:23.884228" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:23.885885" elapsed="0.000656"/>
</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-10-06T01:27:23.886978" elapsed="0.000314"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:23.887635" elapsed="0.000228"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:23.884939" elapsed="0.003030"/>
</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-10-06T01:27:23.212248" elapsed="0.675871"/>
</kw>
<msg time="2026-10-06T01:27:23.888341" 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-10-06T01:27:23.211743" elapsed="0.676703"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:27:23.211296" elapsed="0.677308"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.889773" level="INFO">${dictionary_operational} = {'br-s1': '5'}</msg>
<var>${dictionary_operational}</var>
<arg>br-s1=5</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:27:23.889056" elapsed="0.000775"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.890914" level="INFO">${dictionary_config} = {'br-s1': '0'}</msg>
<var>${dictionary_config}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:27:23.890247" elapsed="0.000722"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.900982" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:23.900189" elapsed="0.000850"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.902041" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:23.901404" elapsed="0.000691"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:23.902186" elapsed="0.000059"/>
</return>
<msg time="2026-10-06T01:27:23.902490" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:23.899372" elapsed="0.003171"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.908504" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:27:23.907876" elapsed="0.000684"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:27:23.908652" elapsed="0.000089"/>
</return>
<msg time="2026-10-06T01:27:23.908958" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:27:23.907107" elapsed="0.001904"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.911715" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:23.911146" elapsed="0.000651"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.912383" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:23.912064" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:23.920031" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:23.920222" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '144'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:27:23.920390" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:23.912869" elapsed="0.007556"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:23.912524" elapsed="0.007954"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:23.920754" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:23.920513" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.912501" elapsed="0.008365"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.922653" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:23.922179" elapsed="0.000562"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:23.921848" elapsed="0.000939"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.921824" elapsed="0.000995"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.923699" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:23.923281" elapsed="0.000479"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:23.922948" elapsed="0.000855"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.922925" elapsed="0.000910"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.924586" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:23.924074" elapsed="0.000547"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:23.925028" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:23.924741" elapsed="0.000361"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.925778" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:23.925375" elapsed="0.000438"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:23.925133" elapsed="0.000728"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.924717" elapsed="0.001173"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.926625" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:23.926126" elapsed="0.000534"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:23.927059" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:23.926774" elapsed="0.000358"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.927784" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:23.927397" elapsed="0.000421"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:23.927163" elapsed="0.000700"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.926750" elapsed="0.001142"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:23.928306" elapsed="0.000461"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:27:23.929338" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:23.928988" elapsed="0.000386"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:27:23.929583" elapsed="0.000322"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:27:23.921337" elapsed="0.008645"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:27:23.930183" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-10-06T01:27:23.930070" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.930046" elapsed="0.000246"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:23.930503" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:27:23.930594" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:27:23.930928" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:27:23.909736" elapsed="0.021230"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:27:23.931030" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:27:23.931199" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:27:23.906129" elapsed="0.025105"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.932722" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:23.932244" elapsed="0.000568"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:27:23.932021" elapsed="0.000841"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:27:23.931875" elapsed="0.001026"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:27:23.931533" elapsed="0.001434"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:23.902946" elapsed="0.030065"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.936619" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:23.936176" elapsed="0.000478"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:27:23.936734" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:27:23.936907" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:27:23.935731" elapsed="0.001208"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.938578" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:23.938247" elapsed="0.000390"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.939229" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:23.938922" elapsed="0.000364"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:23.958236" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:23.958405" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node01wo4j9u7mox61tr0ncscuykk72.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Mon, 05-Oct-2026 01:27:23 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:27:23.958528" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:23.939721" elapsed="0.018840"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:23.939388" elapsed="0.019229"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:23.958885" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:23.958651" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.939363" elapsed="0.019637"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.960794" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:23.960295" elapsed="0.000559"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:23.959963" elapsed="0.000935"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.959939" elapsed="0.000991"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.961744" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:23.961346" elapsed="0.000456"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:23.961001" elapsed="0.000845"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.960979" elapsed="0.000899"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.962621" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:23.962115" elapsed="0.000541"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:23.963049" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:23.962767" elapsed="0.000356"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.963775" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:23.963386" elapsed="0.000422"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:23.963154" elapsed="0.000701"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.962743" elapsed="0.001140"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.964610" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:23.964118" elapsed="0.000527"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:23.965036" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:23.964755" elapsed="0.000354"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.965764" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:23.965379" elapsed="0.000419"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:23.965140" elapsed="0.000702"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.964731" elapsed="0.001140"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:23.966062" elapsed="0.000423"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:27:23.967082" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:23.966723" elapsed="0.000394"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:27:23.967407" elapsed="0.000322"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:27:23.959468" elapsed="0.008340"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:27:23.968009" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-10-06T01:27:23.967895" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.967872" elapsed="0.000246"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:23.968310" elapsed="0.000050"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:27:23.968422" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:27:23.968743" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:27:23.937370" elapsed="0.031410"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:27:23.968844" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:27:23.969012" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:27:23.935124" elapsed="0.033920"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.970566" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:23.970120" elapsed="0.000553"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:27:23.969901" elapsed="0.000847"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:27:23.969756" elapsed="0.001031"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:27:23.969420" elapsed="0.001433"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:23.933120" elapsed="0.037776"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.974720" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:23.974307" elapsed="0.000449"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:27:23.974816" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:27:23.974989" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:27:23.973857" elapsed="0.001164"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.976643" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:23.976331" elapsed="0.000392"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:23.977645" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:23.977337" elapsed="0.000390"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:23.997557" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:23.997739" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node08kx9y5d080lbj5jl4gkt6rg2.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Mon, 05-Oct-2026 01:27:23 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:27:23.997862" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:23.978126" elapsed="0.019769"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:23.977814" elapsed="0.020134"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:23.998191" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:23.997981" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.977791" elapsed="0.020510"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.000095" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:23.999621" elapsed="0.000534"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:23.999268" elapsed="0.000931"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:23.999244" elapsed="0.001030"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.001177" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:24.000746" elapsed="0.000509"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.000374" elapsed="0.000959"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.000351" elapsed="0.001029"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.002411" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:24.001749" elapsed="0.000699"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.002884" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.002544" elapsed="0.000416"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.003622" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:24.003217" elapsed="0.000439"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.002992" elapsed="0.000731"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.002519" elapsed="0.001233"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.004497" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:24.003991" elapsed="0.000542"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.004926" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.004623" elapsed="0.000376"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.005630" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:24.005246" elapsed="0.000418"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.005030" elapsed="0.000700"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.004599" elapsed="0.001160"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:24.005960" elapsed="0.000429"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:27:24.006959" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:24.006607" elapsed="0.000386"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:27:24.007201" elapsed="0.000325"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:27:23.998792" elapsed="0.008815"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:27:24.007837" elapsed="0.000041"/>
</return>
<status status="PASS" start="2026-10-06T01:27:24.007717" elapsed="0.000206"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.007672" elapsed="0.000282"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.008151" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:27:24.008240" elapsed="0.000021"/>
</return>
<msg time="2026-10-06T01:27:24.008582" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:27:23.975448" elapsed="0.033170"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:27:24.008704" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:27:24.008880" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:27:23.973232" elapsed="0.035681"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.010662" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:24.010205" elapsed="0.000566"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:27:24.009978" elapsed="0.000844"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:27:24.009824" elapsed="0.001038"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:27:24.009212" elapsed="0.001718"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:23.971007" elapsed="0.039968"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:23.902656" elapsed="0.108356"/>
</for>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:27:23.898232" elapsed="0.112849"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:27:23.891415" elapsed="0.119794"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.017464" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:24.016989" elapsed="0.000511"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.018112" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:24.017729" elapsed="0.000417"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:24.018203" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:27:24.018400" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:24.016465" elapsed="0.001967"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.022074" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:27:24.021698" elapsed="0.000410"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:27:24.022166" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:27:24.022351" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:27:24.021212" elapsed="0.001171"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.024039" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:24.023713" elapsed="0.000384"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.024761" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:24.024377" elapsed="0.000453"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:24.033300" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:24.033473" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '5397'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;a4b2ef02-355e-4376-b0ed-3873f84c597b&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;9fdec17e-2647-4848-9d17-4ded87bc9d92&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;25f8ee34-9ebc-4e0b-acae-d1da08a0fdca&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;02:ef:b2:a4:76:43&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;12&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:02:ef:b2:a4:76:43&lt;/datapath-id&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:27:24.033660" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:24.025161" elapsed="0.008545"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.024923" elapsed="0.008823"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.033923" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.033770" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.024903" elapsed="0.009099"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.035700" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;a4b2ef02-355e-4376-b0ed-3873f84c597b&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;9fdec17e-2647-4848-9d17-4ded87bc9d92&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;25f8ee34-9ebc-4e0b-acae-d1da08a0fdca&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;02:ef:b2:a4:76:43&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;12&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:02:ef:b2:a4:76:43&lt;/datapath-id&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:24.035134" elapsed="0.000711"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.034795" elapsed="0.001095"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.034764" elapsed="0.001157"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.036734" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:24.036335" elapsed="0.000456"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.035992" elapsed="0.000883"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.035971" elapsed="0.000938"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.037655" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:24.037147" elapsed="0.000564"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.038291" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.037993" elapsed="0.000390"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.039030" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:24.038638" elapsed="0.000426"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.038414" elapsed="0.000697"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.037778" elapsed="0.001361"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.039888" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:24.039393" elapsed="0.000530"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.040295" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.040013" elapsed="0.000372"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.041021" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:24.040633" elapsed="0.000422"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.040416" elapsed="0.000683"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.039990" elapsed="0.001137"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:24.041335" elapsed="0.000438"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:27:24.042299" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:24.041991" elapsed="0.000360"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:27:24.042559" elapsed="0.000311"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:27:24.034344" elapsed="0.008604"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:27:24.043146" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-10-06T01:27:24.043034" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.043011" elapsed="0.000244"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.043467" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:27:24.043554" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:27:24.043951" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:27:24.022828" elapsed="0.021162"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:27:24.044055" elapsed="0.000034"/>
</return>
<msg time="2026-10-06T01:27:24.044224" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:27:24.020620" elapsed="0.023640"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.045735" level="INFO">Item found from container 5 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:24.045270" elapsed="0.000582"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:27:24.045048" elapsed="0.000855"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:27:24.044903" elapsed="0.001038"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:27:24.044566" elapsed="0.001440"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:24.018647" elapsed="0.027402"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.049192" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:24.048924" elapsed="0.000293"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:27:24.049291" elapsed="0.000040"/>
</return>
<msg time="2026-10-06T01:27:24.049440" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:27:24.048589" elapsed="0.000874"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.050608" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:24.050387" elapsed="0.000266"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.051069" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:24.050853" elapsed="0.000255"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:24.064161" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01wo4j9u7mox61tr0ncscuykk72.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:24.064295" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2408'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"a4b2ef02-355e-4376-b0ed-3873f84c597b","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"9fdec17e-2647-4848-9d17-4ded87bc9d92","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"25f8ee34-9ebc-4e0b-acae-d1da08a0fdca","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"02:ef:b2:a4:76:43","ovsdb:ofport":65534,"ovsdb:ifindex":12}],"ovsdb:datapath-id":"00:00:02:ef:b2:a4:76:43"}]}]}} 
 </msg>
<msg time="2026-10-06T01:27:24.064419" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:24.051405" elapsed="0.013048"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.051168" elapsed="0.013323"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.064665" elapsed="0.000076"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.064515" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.051151" elapsed="0.013651"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.066230" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"a4b2ef02-355e-4376-b0ed-3873f84c597b","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"9fdec17e-2647-4848-9d17-4ded87bc9d92","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"25f8ee34-9ebc-4e0b-acae-d1da08a0fdca","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"02:ef:b2:a4:76:43","ovsdb:ofport":65534,"ovsdb:ifindex":12}],"ovsdb:datapath-id":"00:00:02:ef:b2:a4:76:43"}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:24.065729" elapsed="0.000561"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.065476" elapsed="0.000888"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.065459" elapsed="0.000933"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.066973" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:24.066700" elapsed="0.000315"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.066444" elapsed="0.000602"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.066429" elapsed="0.000639"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.067602" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:24.067237" elapsed="0.000390"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.067917" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.067712" elapsed="0.000258"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.068433" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:24.068149" elapsed="0.000308"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.067994" elapsed="0.000496"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.067675" elapsed="0.000835"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.069032" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:24.068691" elapsed="0.000366"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.069333" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.069121" elapsed="0.000266"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.069849" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:24.069564" elapsed="0.000309"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.069410" elapsed="0.000495"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.069104" elapsed="0.000822"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:24.070063" elapsed="0.000302"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:27:24.070756" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:24.070521" elapsed="0.000259"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:27:24.070928" elapsed="0.000208"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:27:24.065119" elapsed="0.006072"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:27:24.071345" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:24.071252" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.071236" elapsed="0.000190"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.071563" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:27:24.071626" elapsed="0.000013"/>
</return>
<msg time="2026-10-06T01:27:24.071887" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:27:24.049774" elapsed="0.022140"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:27:24.071959" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:27:24.072079" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:27:24.048161" elapsed="0.023942"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.073128" level="INFO">Item found from container 5 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:24.072823" elapsed="0.000376"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:27:24.072648" elapsed="0.000587"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:27:24.072545" elapsed="0.000717"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:27:24.072305" elapsed="0.001026"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:24.046160" elapsed="0.027233"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.075920" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:24.075639" elapsed="0.000306"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:27:24.075986" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:27:24.076106" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:27:24.075303" elapsed="0.000826"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.077296" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:24.077057" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.077776" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:24.077539" elapsed="0.000277"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:24.089395" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node08kx9y5d080lbj5jl4gkt6rg2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:24.089528" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2408'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"a4b2ef02-355e-4376-b0ed-3873f84c597b","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"9fdec17e-2647-4848-9d17-4ded87bc9d92","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"25f8ee34-9ebc-4e0b-acae-d1da08a0fdca","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"02:ef:b2:a4:76:43","ovsdb:ofport":65534,"ovsdb:ifindex":12}],"ovsdb:datapath-id":"00:00:02:ef:b2:a4:76:43"}]}]}} 
 </msg>
<msg time="2026-10-06T01:27:24.089634" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:24.078100" elapsed="0.011559"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.077877" elapsed="0.011841"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.089892" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.089743" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.077860" elapsed="0.012110"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.091408" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"a4b2ef02-355e-4376-b0ed-3873f84c597b","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"9fdec17e-2647-4848-9d17-4ded87bc9d92","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"25f8ee34-9ebc-4e0b-acae-d1da08a0fdca","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"02:ef:b2:a4:76:43","ovsdb:ofport":65534,"ovsdb:ifindex":12}],"ovsdb:datapath-id":"00:00:02:ef:b2:a4:76:43"}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:24.091039" elapsed="0.000458"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.090795" elapsed="0.000736"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.090622" elapsed="0.000932"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.092126" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:24.091858" elapsed="0.000310"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.091606" elapsed="0.000594"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.091591" elapsed="0.000631"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.092782" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:24.092413" elapsed="0.000395"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.093087" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.092883" elapsed="0.000264"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.093611" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:24.093346" elapsed="0.000290"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.093170" elapsed="0.000499"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.092862" elapsed="0.000843"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.094223" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:24.093886" elapsed="0.000362"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.094531" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.094328" elapsed="0.000256"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.095042" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:24.094779" elapsed="0.000287"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.094607" elapsed="0.000492"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.094295" elapsed="0.000824"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:24.095258" elapsed="0.000312"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:27:24.095959" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:24.095740" elapsed="0.000243"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:27:24.096130" elapsed="0.000222"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:27:24.090287" elapsed="0.006120"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:27:24.096562" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:24.096469" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.096451" elapsed="0.000190"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.096794" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:27:24.096858" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:27:24.097103" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:27:24.076434" elapsed="0.020695"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:27:24.097174" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:27:24.097295" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:27:24.074896" elapsed="0.022438"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.098366" level="INFO">Item found from container 5 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:24.098043" elapsed="0.000394"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:27:24.097886" elapsed="0.000586"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:27:24.097784" elapsed="0.000716"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:27:24.097539" elapsed="0.001007"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:24.073477" elapsed="0.025131"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:24.018497" elapsed="0.080139"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:27:24.015764" elapsed="0.082935"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:27:24.011518" elapsed="0.087231"/>
</kw>
<doc>Create bridge br-s1 using OVS command and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:27:23.210926" elapsed="0.887881"/>
</kw>
<doc>Create bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="PASS" start="2026-10-06T01:27:22.812942" elapsed="1.285974"/>
</test>
<test id="s1-s2-s1-t5" name="Add Port Manually and Verify Before Fail" line="40">
<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-10-06T01:27:24.100816" elapsed="0.000386"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:24.100421" elapsed="0.000834"/>
</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-10-06T01:27:24.102180" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:24.102094" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.102077" elapsed="0.000166"/>
</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-10-06T01:27:24.104288" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:24.104204" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.104187" elapsed="0.000178"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.105269" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:24.104948" elapsed="0.000347"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.105748" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:24.105458" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:24.105812" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:27:24.105936" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:24.104577" elapsed="0.001382"/>
</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-10-06T01:27:24.108404" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:24.108296" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.108278" elapsed="0.000190"/>
</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-10-06T01:27:24.109612" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:24.109523" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.109506" elapsed="0.000192"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:24.110075" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:24.109846" elapsed="0.000254"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:24.110468" 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-10-06T01:27:24.110261" elapsed="0.000232"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:24.153287" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:24.111078" elapsed="0.042402"/>
</kw>
<msg time="2026-10-06T01:27:24.153659" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:24.153717" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:24.110646" elapsed="0.043108"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:24.234911" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:24.154363" elapsed="0.080821"/>
</kw>
<msg time="2026-10-06T01:27:24.235484" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:24.235529" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:24.153920" elapsed="0.081646"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.235984" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.235671" elapsed="0.000390"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.235641" elapsed="0.000446"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.236724" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:24.236273" elapsed="0.000535"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.237072" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.236871" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.236854" elapsed="0.000313"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:24.237204" elapsed="0.000037"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:24.239875" elapsed="0.000503"/>
</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-10-06T01:27:24.241606" elapsed="0.000675"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:24.243509" elapsed="0.000340"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:24.238115" elapsed="0.005803"/>
</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-10-06T01:27:24.237552" elapsed="0.006484"/>
</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="PASS" start="2026-10-06T01:27:24.109243" elapsed="0.134871"/>
</kw>
<msg time="2026-10-06T01:27:24.244198" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:24.244238" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:24.108617" elapsed="0.135656"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:24.244466" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:24.244369" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.244346" elapsed="0.000198"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:24.244908" elapsed="0.000024"/>
</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-10-06T01:27:24.245214" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:24.245278" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:24.107995" elapsed="0.137386"/>
</kw>
<msg time="2026-10-06T01:27:24.245465" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:24.245505" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:24.106276" elapsed="0.139264"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.246141" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.245609" elapsed="0.000582"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.245593" elapsed="0.000620"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:24.106138" elapsed="0.140096"/>
</iter>
<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-10-06T01:27:24.248723" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:24.248622" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.248604" elapsed="0.000182"/>
</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-10-06T01:27:24.250060" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:24.249968" elapsed="0.000135"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.249950" elapsed="0.000173"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:24.250519" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:24.250268" elapsed="0.000276"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:24.250900" 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-10-06T01:27:24.250720" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:24.283159" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:24.251505" elapsed="0.031869"/>
</kw>
<msg time="2026-10-06T01:27:24.283536" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:24.283578" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:24.251078" elapsed="0.032535"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:24.358134" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:24.284235" elapsed="0.074099"/>
</kw>
<msg time="2026-10-06T01:27:24.358494" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:24.358535" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:24.283804" elapsed="0.074766"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.358873" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.358642" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.358623" elapsed="0.000345"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.359503" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:24.359149" elapsed="0.000436"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.359866" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.359651" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.359634" elapsed="0.000326"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:24.359990" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:24.362490" elapsed="0.000529"/>
</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-10-06T01:27:24.364247" elapsed="0.000512"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:24.365974" elapsed="0.002489"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:24.360798" elapsed="0.007734"/>
</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-10-06T01:27:24.360263" elapsed="0.008388"/>
</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="PASS" start="2026-10-06T01:27:24.249595" elapsed="0.119243"/>
</kw>
<msg time="2026-10-06T01:27:24.368922" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:24.368962" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:24.248932" elapsed="0.120067"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:24.369207" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-10-06T01:27:24.369084" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.369060" elapsed="0.000231"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.369623" elapsed="0.000024"/>
</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-10-06T01:27:24.369977" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:24.370042" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:24.248306" elapsed="0.121820"/>
</kw>
<msg time="2026-10-06T01:27:24.370209" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:24.370248" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:24.246511" elapsed="0.123772"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.370587" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.370370" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.370354" elapsed="0.000305"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:24.246371" elapsed="0.124346"/>
</iter>
<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-10-06T01:27:24.373084" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:24.372999" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.372982" elapsed="0.000164"/>
</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-10-06T01:27:24.374246" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:24.374162" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.374145" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:24.374712" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:24.374467" elapsed="0.000271"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:24.375074" 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-10-06T01:27:24.374896" elapsed="0.000201"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:24.408589" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:24.375699" elapsed="0.033098"/>
</kw>
<msg time="2026-10-06T01:27:24.408954" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:24.408995" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:24.375249" elapsed="0.033781"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:24.479653" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:24.409633" elapsed="0.070269"/>
</kw>
<msg time="2026-10-06T01:27:24.480096" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:24.480139" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:24.409193" elapsed="0.070981"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.480543" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.480265" elapsed="0.000353"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.480238" elapsed="0.000406"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.481243" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:24.480852" elapsed="0.000489"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.481601" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.481404" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.481387" elapsed="0.000326"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:24.481746" elapsed="0.000036"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:24.484489" elapsed="0.000507"/>
</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-10-06T01:27:24.486439" elapsed="0.000485"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:24.488092" elapsed="0.000538"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:24.482713" elapsed="0.006007"/>
</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-10-06T01:27:24.482121" elapsed="0.006719"/>
</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="PASS" start="2026-10-06T01:27:24.373906" elapsed="0.115012"/>
</kw>
<msg time="2026-10-06T01:27:24.489002" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:24.489041" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:24.373292" elapsed="0.115785"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:24.489232" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:24.489146" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.489129" elapsed="0.000198"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.489656" elapsed="0.000325"/>
</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-10-06T01:27:24.490268" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:24.490351" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:24.372705" elapsed="0.117733"/>
</kw>
<msg time="2026-10-06T01:27:24.490521" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:24.490561" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:24.370967" elapsed="0.119629"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.490948" elapsed="0.000018"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.490728" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.490711" elapsed="0.000307"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:24.370830" elapsed="0.120209"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:24.106003" elapsed="0.385067"/>
</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-10-06T01:27:24.103907" elapsed="0.387220"/>
</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-10-06T01:27:24.101838" elapsed="0.389343"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:24.101420" elapsed="0.389802"/>
</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-10-06T01:27:24.100064" elapsed="0.391207"/>
</kw>
<kw name="Add Sample Port To The Manual Bridge And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.494850" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.494599" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.494581" elapsed="0.000343"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:24.495247" 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-10-06T01:27:24.495358" 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-10-06T01:27:24.495115" elapsed="0.000268"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.495876" level="INFO">Attempting to execute command "sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan" on remote system "10.30.170.234" 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-10-06T01:27:24.495568" elapsed="0.000384"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:24.496463" level="INFO">${conn_id} = 424</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-10-06T01:27:24.496126" elapsed="0.000361"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.497335" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:27:24.497407" 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-10-06T01:27:24.497052" elapsed="0.000376"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:24.497576" elapsed="0.000298"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:27:24.498642" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:27:24.886082" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:27:23 UTC 2026

  System load:  0.03               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:27:23 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:27:24.498406" elapsed="0.387780"/>
</kw>
<msg time="2026-10-06T01:27:24.886252" 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-10-06T01:27:24.498035" elapsed="0.388299"/>
</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-10-06T01:27:24.496696" elapsed="0.389731"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:27:24.886849" level="INFO">Executing command 'sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan'.</msg>
<msg time="2026-10-06T01:27:24.929821" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:27:24.929966" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:27:24.930023" level="INFO">${stderr} = ovs-vsctl: Error detected while setting up 'vx1': vx1: vxlan type requires valid 'remote_ip' argument.  See ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/var/log/openvswitch"...</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-10-06T01:27:24.886654" elapsed="0.043402"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:24.930274" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.931257" level="INFO">ovs-vsctl: Error detected while setting up 'vx1': vx1: vxlan type requires valid 'remote_ip' argument.  See ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/var/log/openvswitch".</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:24.930910" elapsed="0.000422"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:27:24.931579" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:24.931433" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.931402" elapsed="0.000292"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:27:24.931881" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:27:24.931766" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.931746" elapsed="0.000241"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:27:24.932028" elapsed="0.000019"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:24.933077" 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-10-06T01:27:24.933765" elapsed="0.000196"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:24.934155" elapsed="0.000121"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:24.932480" elapsed="0.001879"/>
</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-10-06T01:27:24.494165" elapsed="0.440292"/>
</kw>
<msg time="2026-10-06T01:27:24.934523" 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-10-06T01:27:24.493639" elapsed="0.440947"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:27:24.493157" elapsed="0.441611"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.935472" level="INFO">${dictionary_operational} = {'vx1': '2'}</msg>
<var>${dictionary_operational}</var>
<arg>vx1=2</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:27:24.935038" elapsed="0.000468"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.936169" level="INFO">${dictionary_config} = {'vx1': '0'}</msg>
<var>${dictionary_config}</var>
<arg>vx1=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:27:24.935785" elapsed="0.000417"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.942533" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:24.942036" elapsed="0.000536"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.943186" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:24.942805" elapsed="0.000414"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:24.943275" elapsed="0.000079"/>
</return>
<msg time="2026-10-06T01:27:24.943497" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:24.941517" elapsed="0.002011"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.947481" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:27:24.947089" elapsed="0.000427"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:27:24.947573" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:27:24.947775" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:27:24.946566" elapsed="0.001242"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.949445" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:24.949119" elapsed="0.000383"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.950090" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:24.949784" elapsed="0.000361"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:24.962910" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:24.963111" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '144'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:27:24.963262" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:24.950831" elapsed="0.012464"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.950229" elapsed="0.013142"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.963619" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.963406" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.950206" elapsed="0.013545"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.965571" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:24.965082" elapsed="0.000554"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.964748" elapsed="0.000953"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.964721" elapsed="0.001015"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.966531" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:24.966139" elapsed="0.000450"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.965808" elapsed="0.000826"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.965787" elapsed="0.000878"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.967463" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:24.966928" elapsed="0.000571"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.967965" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.967649" elapsed="0.000391"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.968709" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:24.968292" elapsed="0.000453"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.968072" elapsed="0.000720"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.967623" elapsed="0.001197"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.969566" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:24.969071" elapsed="0.000531"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.970004" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.969720" elapsed="0.000358"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.970729" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:24.970340" elapsed="0.000425"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.970110" elapsed="0.000702"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.969669" elapsed="0.001172"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:24.971035" elapsed="0.000421"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:27:24.972031" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:24.971695" elapsed="0.000370"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:27:24.972274" elapsed="0.000322"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:27:24.964208" elapsed="0.008466"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:27:24.973148" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-10-06T01:27:24.973022" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.972981" elapsed="0.000281"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.973481" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:27:24.973571" elapsed="0.000019"/>
</return>
<msg time="2026-10-06T01:27:24.973955" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:27:24.948233" elapsed="0.025775"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:27:24.974098" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:27:24.974272" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:27:24.945941" elapsed="0.028384"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.975803" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:24.975334" elapsed="0.000556"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:27:24.975097" elapsed="0.000843"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:27:24.974953" elapsed="0.001026"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:27:24.974614" elapsed="0.001433"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:24.943791" elapsed="0.032299"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.979717" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:24.979324" elapsed="0.000429"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:27:24.979812" elapsed="0.000049"/>
</return>
<msg time="2026-10-06T01:27:24.980042" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:27:24.978861" elapsed="0.001226"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.981859" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:24.981520" elapsed="0.000469"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.982609" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:24.982259" elapsed="0.000409"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:24.994621" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01wo4j9u7mox61tr0ncscuykk72.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:24.994791" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:27:24.994911" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:24.983369" elapsed="0.011576"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.983017" elapsed="0.011983"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.995246" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.995035" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.982756" elapsed="0.012626"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.997180" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:24.996722" elapsed="0.000518"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.996350" elapsed="0.000935"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.996325" elapsed="0.001010"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.998144" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:24.997766" elapsed="0.000435"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.997409" elapsed="0.000836"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.997387" elapsed="0.000889"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:24.999037" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:24.998532" elapsed="0.000539"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:24.999458" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:24.999161" elapsed="0.000370"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.000166" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:24.999796" elapsed="0.000404"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:24.999561" elapsed="0.000684"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:24.999138" elapsed="0.001135"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.001023" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:25.000530" elapsed="0.000529"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.001444" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:25.001149" elapsed="0.000369"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.002148" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:25.001785" elapsed="0.000397"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:25.001549" elapsed="0.000678"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.001125" elapsed="0.001130"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:25.002467" elapsed="0.000424"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:27:25.003492" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:25.003131" elapsed="0.000398"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:27:25.003767" elapsed="0.000306"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:27:24.995860" elapsed="0.008294"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:27:25.004394" elapsed="0.000044"/>
</return>
<status status="PASS" start="2026-10-06T01:27:25.004245" elapsed="0.000246"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.004221" elapsed="0.000345"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.004790" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:27:25.004881" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:27:25.005184" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:27:24.980610" elapsed="0.024609"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:27:25.005283" elapsed="0.000055"/>
</return>
<msg time="2026-10-06T01:27:25.005477" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:27:24.978251" elapsed="0.027259"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.006971" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:25.006519" elapsed="0.000541"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:27:25.006280" elapsed="0.000830"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:27:25.006134" elapsed="0.001014"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:27:25.005817" elapsed="0.001398"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:24.976201" elapsed="0.031057"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.010853" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:25.010460" elapsed="0.000434"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:27:25.010953" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:27:25.011124" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:27:25.009999" elapsed="0.001157"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.013026" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:25.012486" elapsed="0.000600"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.013843" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:25.013434" elapsed="0.000469"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:25.024505" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node08kx9y5d080lbj5jl4gkt6rg2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:25.024610" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:27:25.024720" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:25.014406" elapsed="0.010340"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:25.013995" elapsed="0.010791"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.025071" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:25.024817" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.013971" elapsed="0.011212"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.026971" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:25.026490" elapsed="0.000540"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:25.026142" elapsed="0.000932"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.026118" elapsed="0.000987"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.027917" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:25.027518" elapsed="0.000456"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:25.027176" elapsed="0.000842"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.027154" elapsed="0.000895"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.028813" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:25.028287" elapsed="0.000562"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.029217" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:25.028937" elapsed="0.000418"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.030008" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:25.029615" elapsed="0.000427"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:25.029393" elapsed="0.000696"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.028914" elapsed="0.001203"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.030875" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:25.030367" elapsed="0.000543"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.031285" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:25.031000" elapsed="0.000376"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.032017" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:25.031627" elapsed="0.000425"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:25.031407" elapsed="0.000691"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.030976" elapsed="0.001150"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:25.032342" elapsed="0.000471"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:27:25.033364" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:25.033034" elapsed="0.000365"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:27:25.033607" elapsed="0.000317"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:27:25.025647" elapsed="0.008356"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:27:25.034204" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-10-06T01:27:25.034090" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.034067" elapsed="0.000262"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.034525" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:27:25.034614" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:27:25.034937" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:27:25.011585" elapsed="0.023388"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:27:25.035038" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:27:25.035208" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:27:25.009402" elapsed="0.025840"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.036787" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:25.036256" elapsed="0.000614"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:27:25.036024" elapsed="0.000897"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:27:25.035878" elapsed="0.001080"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:27:25.035542" elapsed="0.001481"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:25.007389" elapsed="0.029676"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:24.943600" elapsed="0.093500"/>
</for>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:27:24.940831" elapsed="0.096332"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:27:24.936505" elapsed="0.100724"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.042708" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:25.042285" elapsed="0.000452"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.043170" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:25.042892" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:25.043274" elapsed="0.000029"/>
</return>
<msg time="2026-10-06T01:27:25.043427" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:25.041920" elapsed="0.001531"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.046070" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:27:25.045802" elapsed="0.000292"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:27:25.046137" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:27:25.046258" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:27:25.045470" elapsed="0.000811"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.047516" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:25.047280" elapsed="0.000278"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.047981" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:25.047766" elapsed="0.000254"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:25.056954" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:25.057113" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '6049'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;a4b2ef02-355e-4376-b0ed-3873f84c597b&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;9fdec17e-2647-4848-9d17-4ded87bc9d92&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;25f8ee34-9ebc-4e0b-acae-d1da08a0fdca&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;02:ef:b2:a4:76:43&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;12&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vx1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;d36c5193-7ced-459f-8754-6bf9091a30a1&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vx1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;26020ccf-01d3-482d-ad16-aa762be6d178&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:02:ef:b2:a4:76:43&lt;/datapath-id&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:27:25.057292" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:25.048320" elapsed="0.009012"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:25.048081" elapsed="0.009291"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.057546" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:25.057396" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.048064" elapsed="0.009560"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.058948" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;a4b2ef02-355e-4376-b0ed-3873f84c597b&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;9fdec17e-2647-4848-9d17-4ded87bc9d92&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;25f8ee34-9ebc-4e0b-acae-d1da08a0fdca&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;02:ef:b2:a4:76:43&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;12&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vx1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;d36c5193-7ced-459f-8754-6bf9091a30a1&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vx1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;26020ccf-01d3-482d-ad16-aa762be6d178&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:02:ef:b2:a4:76:43&lt;/datapath-id&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:25.058553" elapsed="0.000537"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:25.058301" elapsed="0.000823"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.058283" elapsed="0.000864"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.059738" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:25.059452" elapsed="0.000327"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:25.059199" elapsed="0.000613"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.059183" elapsed="0.000651"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.060368" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:25.060004" elapsed="0.000398"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.060689" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:25.060470" elapsed="0.000274"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.061185" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:25.060922" elapsed="0.000287"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:25.060767" elapsed="0.000475"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.060453" elapsed="0.000809"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.061947" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:25.061445" elapsed="0.000528"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.062240" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:25.062038" elapsed="0.000255"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.062794" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:25.062487" elapsed="0.000333"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:25.062330" elapsed="0.000525"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.062021" elapsed="0.000855"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:25.063017" elapsed="0.000321"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:27:25.063739" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:25.063499" elapsed="0.000265"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:27:25.063916" elapsed="0.000214"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:27:25.057963" elapsed="0.006226"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:27:25.064350" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-10-06T01:27:25.064252" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.064235" elapsed="0.000209"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.064587" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:27:25.064651" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:27:25.064944" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:27:25.046597" elapsed="0.018376"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:27:25.065020" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:27:25.065144" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:27:25.045047" elapsed="0.020123"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.066196" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:25.065891" elapsed="0.000389"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:27:25.065733" elapsed="0.000595"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:27:25.065614" elapsed="0.000743"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:27:25.065391" elapsed="0.001013"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:25.043607" elapsed="0.022859"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.068999" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:25.068733" elapsed="0.000291"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:27:25.069065" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:27:25.069185" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:27:25.068401" elapsed="0.000808"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.070369" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:25.070137" elapsed="0.000273"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.070832" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:25.070596" elapsed="0.000275"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:25.083396" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01wo4j9u7mox61tr0ncscuykk72.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:25.083549" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2679'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"a4b2ef02-355e-4376-b0ed-3873f84c597b","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"9fdec17e-2647-4848-9d17-4ded87bc9d92","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"25f8ee34-9ebc-4e0b-acae-d1da08a0fdca","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"02:ef:b2:a4:76:43","ovsdb:ofport":65534,"ovsdb:ifindex":12},{"tp-id":"vx1","ovsdb:port-uuid":"d36c5193-7ced-459f-8754-6bf9091a30a1","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"26020ccf-01d3-482d-ad16-aa762be6d178","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:02:ef:b2:a4:76:43"}]}]}} 
 </msg>
<msg time="2026-10-06T01:27:25.083660" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:25.071158" elapsed="0.012542"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:25.070933" elapsed="0.012809"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.083921" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:25.083767" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.070916" elapsed="0.013086"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.085369" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"a4b2ef02-355e-4376-b0ed-3873f84c597b","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"9fdec17e-2647-4848-9d17-4ded87bc9d92","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"25f8ee34-9ebc-4e0b-acae-d1da08a0fdca","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"02:ef:b2:a4:76:43","ovsdb:ofport":65534,"ovsdb:ifindex":12},{"tp-id":"vx1","ovsdb:port-uuid":"d36c5193-7ced-459f-8754-6bf9091a30a1","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"26020ccf-01d3-482d-ad16-aa762be6d178","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:02:ef:b2:a4:76:43"}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:25.084977" elapsed="0.000500"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:25.084725" elapsed="0.000796"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.084705" elapsed="0.000842"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.086136" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:25.085861" elapsed="0.000319"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:25.085600" elapsed="0.000612"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.085584" elapsed="0.000651"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.086789" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:25.086425" elapsed="0.000390"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.087084" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:25.086879" elapsed="0.000259"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.087777" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:25.087336" elapsed="0.000466"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:25.087163" elapsed="0.000674"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.086863" elapsed="0.000996"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.088453" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:25.088031" elapsed="0.000448"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.088779" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:25.088550" elapsed="0.000283"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.089281" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:25.089014" elapsed="0.000305"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:25.088856" elapsed="0.000500"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.088532" elapsed="0.000847"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:25.089522" elapsed="0.000313"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:27:25.090217" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:25.089994" elapsed="0.000249"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:27:25.090407" elapsed="0.000213"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:27:25.084340" elapsed="0.006353"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:27:25.090844" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:25.090760" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.090743" elapsed="0.000182"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.091066" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:27:25.091131" elapsed="0.000015"/>
</return>
<msg time="2026-10-06T01:27:25.091429" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:27:25.069515" elapsed="0.021941"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:27:25.091504" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:27:25.091629" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:27:25.067981" elapsed="0.023673"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.092722" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:25.092387" elapsed="0.000410"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:27:25.092211" elapsed="0.000623"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:27:25.092107" elapsed="0.000756"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:27:25.091880" elapsed="0.001035"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:25.066549" elapsed="0.026452"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.095578" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:25.095292" elapsed="0.000311"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:27:25.095646" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:27:25.095786" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:27:25.094962" elapsed="0.000848"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.097250" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:25.097028" elapsed="0.000264"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.097726" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:25.097493" elapsed="0.000273"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:25.109266" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node08kx9y5d080lbj5jl4gkt6rg2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:25.109428" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2679'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"a4b2ef02-355e-4376-b0ed-3873f84c597b","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"9fdec17e-2647-4848-9d17-4ded87bc9d92","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"25f8ee34-9ebc-4e0b-acae-d1da08a0fdca","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"02:ef:b2:a4:76:43","ovsdb:ofport":65534,"ovsdb:ifindex":12},{"tp-id":"vx1","ovsdb:port-uuid":"d36c5193-7ced-459f-8754-6bf9091a30a1","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"26020ccf-01d3-482d-ad16-aa762be6d178","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:02:ef:b2:a4:76:43"}]}]}} 
 </msg>
<msg time="2026-10-06T01:27:25.109532" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:25.098056" elapsed="0.011500"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:25.097828" elapsed="0.011766"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.109789" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:25.109618" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.097811" elapsed="0.012058"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.111182" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"a4b2ef02-355e-4376-b0ed-3873f84c597b","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"9fdec17e-2647-4848-9d17-4ded87bc9d92","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"25f8ee34-9ebc-4e0b-acae-d1da08a0fdca","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"02:ef:b2:a4:76:43","ovsdb:ofport":65534,"ovsdb:ifindex":12},{"tp-id":"vx1","ovsdb:port-uuid":"d36c5193-7ced-459f-8754-6bf9091a30a1","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"26020ccf-01d3-482d-ad16-aa762be6d178","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:02:ef:b2:a4:76:43"}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:25.110811" elapsed="0.000463"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:25.110544" elapsed="0.000802"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.110527" elapsed="0.000843"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.111942" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:25.111657" elapsed="0.000325"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:25.111421" elapsed="0.000592"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.111406" elapsed="0.000629"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.112575" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:25.112203" elapsed="0.000397"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.113037" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:25.112825" elapsed="0.000268"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.113581" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:25.113292" elapsed="0.000314"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:25.113126" elapsed="0.000515"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.112649" elapsed="0.001015"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.114189" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:25.113851" elapsed="0.000363"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.114491" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:25.114277" elapsed="0.000265"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.114995" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:25.114733" elapsed="0.000286"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:25.114564" elapsed="0.000487"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.114260" elapsed="0.000811"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:25.115209" elapsed="0.000305"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:27:25.115904" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:25.115669" elapsed="0.000259"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:27:25.116075" elapsed="0.000206"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:27:25.110188" elapsed="0.006163"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:27:25.116540" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-10-06T01:27:25.116431" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.116409" elapsed="0.000231"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.116813" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:27:25.116877" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:27:25.117140" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:27:25.096126" elapsed="0.021040"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:27:25.117211" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:27:25.117346" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:27:25.094530" elapsed="0.022841"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.118385" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:25.118071" elapsed="0.000385"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:27:25.117914" elapsed="0.000578"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:27:25.117812" elapsed="0.000707"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:27:25.117573" elapsed="0.000993"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:25.093089" elapsed="0.025539"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:25.043499" elapsed="0.075159"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:27:25.041421" elapsed="0.077300"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:27:25.037535" elapsed="0.081234"/>
</kw>
<doc>Add Port vx1 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:27:24.492788" elapsed="0.626040"/>
</kw>
<doc>Add port with OVS command and verify it gets applied from all instances.</doc>
<status status="PASS" start="2026-10-06T01:27:24.099423" elapsed="1.019515"/>
</test>
<test id="s1-s2-s1-t6" name="Create Tap Device Before Fail" line="44">
<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-10-06T01:27:25.120721" elapsed="0.000198"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:25.120420" elapsed="0.000549"/>
</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-10-06T01:27:25.122096" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:25.122005" elapsed="0.000133"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.121988" elapsed="0.000171"/>
</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-10-06T01:27:25.124103" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:25.124012" elapsed="0.000133"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.123995" elapsed="0.000172"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.125140" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:25.124800" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.125604" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:25.125331" elapsed="0.000296"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:25.125667" elapsed="0.000044"/>
</return>
<msg time="2026-10-06T01:27:25.125811" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:25.124400" elapsed="0.001435"/>
</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-10-06T01:27:25.128400" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:25.128295" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.128277" elapsed="0.000187"/>
</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-10-06T01:27:25.129611" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:25.129526" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.129509" elapsed="0.000189"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:25.130077" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:25.129847" elapsed="0.000254"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:25.130462" 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-10-06T01:27:25.130265" elapsed="0.000221"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:25.165759" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:25.131075" elapsed="0.034865"/>
</kw>
<msg time="2026-10-06T01:27:25.166122" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:25.166164" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:25.130641" elapsed="0.035559"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:25.226040" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "B "e "f "o "r "[78Ce "[A[78C
 "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:25.166835" elapsed="0.059386"/>
</kw>
<msg time="2026-10-06T01:27:25.226439" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:25.226481" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:25.166380" elapsed="0.060136"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.226824" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:25.226590" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.226570" elapsed="0.000351"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.227451" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "B "e "f "o "r "[78Ce "[A[78C
 "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:25.227098" elapsed="0.000431"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.227807" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:25.227591" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.227574" elapsed="0.000327"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:25.227932" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:25.230473" elapsed="0.000503"/>
</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-10-06T01:27:25.232226" elapsed="0.000569"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:25.234226" elapsed="0.000343"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:25.228761" elapsed="0.005877"/>
</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-10-06T01:27:25.228215" elapsed="0.006567"/>
</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="PASS" start="2026-10-06T01:27:25.129253" elapsed="0.105608"/>
</kw>
<msg time="2026-10-06T01:27:25.234946" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:25.234987" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:25.128611" elapsed="0.106412"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:25.235202" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:25.235102" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.235079" elapsed="0.000205"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:25.235631" elapsed="0.000025"/>
</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-10-06T01:27:25.236027" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:25.236094" 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="PASS" start="2026-10-06T01:27:25.128008" elapsed="0.108175"/>
</kw>
<msg time="2026-10-06T01:27:25.236268" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:25.236321" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:25.126153" elapsed="0.110207"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.236667" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:25.236445" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.236428" elapsed="0.000331"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:25.126015" elapsed="0.110765"/>
</iter>
<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-10-06T01:27:25.239378" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:25.239277" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.239260" elapsed="0.000181"/>
</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-10-06T01:27:25.240582" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:25.240463" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.240446" elapsed="0.000206"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:25.241056" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:25.240822" elapsed="0.000260"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:25.241441" 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-10-06T01:27:25.241246" elapsed="0.000221"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:25.273716" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:25.242065" elapsed="0.031827"/>
</kw>
<msg time="2026-10-06T01:27:25.274048" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:25.274090" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:25.241623" elapsed="0.032502"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:25.326523" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "B "e "f "o "r "[78Ce "[A[78C
 "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:25.274747" elapsed="0.051971"/>
</kw>
<msg time="2026-10-06T01:27:25.326879" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:25.326920" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:25.274288" elapsed="0.052667"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.327226" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:25.327025" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.327006" elapsed="0.000327"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.327871" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "B "e "f "o "r "[78Ce "[A[78C
 "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:25.327514" elapsed="0.000434"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.328203" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:25.328008" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.327991" elapsed="0.000304"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:25.328340" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:25.330801" elapsed="0.000470"/>
</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-10-06T01:27:25.332494" elapsed="0.000471"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:25.334162" elapsed="0.000323"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:25.329121" elapsed="0.005431"/>
</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-10-06T01:27:25.328606" elapsed="0.006063"/>
</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="PASS" start="2026-10-06T01:27:25.240186" elapsed="0.094606"/>
</kw>
<msg time="2026-10-06T01:27:25.334875" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:25.334914" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:25.239589" elapsed="0.095361"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:25.335102" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:25.335018" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.335002" elapsed="0.000177"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.335507" elapsed="0.000023"/>
</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-10-06T01:27:25.336111" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:25.336178" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:25.238987" elapsed="0.097277"/>
</kw>
<msg time="2026-10-06T01:27:25.336361" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:25.336415" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:25.237035" elapsed="0.099418"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.336760" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:25.336524" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.336507" elapsed="0.000326"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:25.236895" elapsed="0.099960"/>
</iter>
<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-10-06T01:27:25.341150" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:25.341065" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.341047" elapsed="0.000166"/>
</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-10-06T01:27:25.342300" elapsed="0.000025"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:25.342216" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.342200" elapsed="0.000176"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:25.342766" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:25.342519" elapsed="0.000272"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:25.343127" 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-10-06T01:27:25.342952" elapsed="0.000206"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:25.375655" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:25.343791" elapsed="0.032078"/>
</kw>
<msg time="2026-10-06T01:27:25.376032" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:25.376074" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:25.343340" elapsed="0.032770"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:25.430318" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "B "e "f "o "r "[78Ce "[A[78C
 "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:25.376760" elapsed="0.053736"/>
</kw>
<msg time="2026-10-06T01:27:25.430654" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:25.430724" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:25.376275" elapsed="0.054486"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.431041" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:25.430833" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.430814" elapsed="0.000321"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.431670" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "B "e "f "o "r "[78Ce "[A[78C
 "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:25.431325" elapsed="0.000440"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.432024" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:25.431826" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.431810" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:25.432147" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:25.434756" elapsed="0.000486"/>
</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-10-06T01:27:25.436523" elapsed="0.000486"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:25.438210" elapsed="0.000337"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:25.433025" elapsed="0.005590"/>
</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-10-06T01:27:25.432451" elapsed="0.006305"/>
</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="PASS" start="2026-10-06T01:27:25.341960" elapsed="0.096875"/>
</kw>
<msg time="2026-10-06T01:27:25.438918" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:25.438958" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:25.341372" elapsed="0.097623"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:25.439153" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:25.439066" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.439048" elapsed="0.000185"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.439567" elapsed="0.000024"/>
</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-10-06T01:27:25.439888" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:25.439953" 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="PASS" start="2026-10-06T01:27:25.340769" elapsed="0.099271"/>
</kw>
<msg time="2026-10-06T01:27:25.440124" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:25.440164" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:25.337099" elapsed="0.103102"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.440518" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:25.440271" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.440255" elapsed="0.000339"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:25.336963" elapsed="0.103652"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:25.125880" elapsed="0.314763"/>
</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-10-06T01:27:25.123708" elapsed="0.317020"/>
</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-10-06T01:27:25.121738" elapsed="0.319045"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:25.121115" elapsed="0.319709"/>
</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-10-06T01:27:25.120043" elapsed="0.320828"/>
</kw>
<kw name="Create Sample Tap Device" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.443298" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:25.443005" elapsed="0.000373"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.442821" elapsed="0.000589"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:25.443774" 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-10-06T01:27:25.443871" 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-10-06T01:27:25.443613" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.444400" level="INFO">Attempting to execute command "ip tuntap add mode tap vport1" on remote system "10.30.170.234" 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-10-06T01:27:25.444082" elapsed="0.000368"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:25.445271" level="INFO">${conn_id} = 429</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-10-06T01:27:25.444660" elapsed="0.000635"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.446137" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:27:25.446206" 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-10-06T01:27:25.445880" elapsed="0.000347"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:25.446392" elapsed="0.000298"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:27:25.447460" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:27:25.822420" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:27:23 UTC 2026

  System load:  0.03               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:27:24 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:27:25.447211" elapsed="0.375309"/>
</kw>
<msg time="2026-10-06T01:27:25.822583" 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-10-06T01:27:25.446852" elapsed="0.375794"/>
</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-10-06T01:27:25.445509" elapsed="0.377246"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:27:25.823140" level="INFO">Executing command 'ip tuntap add mode tap vport1'.</msg>
<msg time="2026-10-06T01:27:25.836525" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-10-06T01:27:25.836697" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:27:25.836759" level="INFO">${stderr} = ioctl(TUNSETIFF): Operation not permitted</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-10-06T01:27:25.822971" elapsed="0.013819"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:25.837008" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.837982" level="INFO">ioctl(TUNSETIFF): Operation not permitted</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:25.837618" elapsed="0.000423"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:27:25.838278" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:25.838137" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.838107" elapsed="0.000283"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:27:25.838573" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:27:25.838459" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.838439" elapsed="0.000261"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:27:25.838746" elapsed="0.000018"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:25.839747" elapsed="0.000388"/>
</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-10-06T01:27:25.840400" elapsed="0.000193"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:25.840806" elapsed="0.000124"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:25.839155" elapsed="0.001841"/>
</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-10-06T01:27:25.442393" elapsed="0.398696"/>
</kw>
<msg time="2026-10-06T01:27:25.841154" 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-10-06T01:27:25.441863" elapsed="0.399354"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ip tuntap add mode tap vport1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:27:25.441416" elapsed="0.399916"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:25.844234" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:25.843906" elapsed="0.000417"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:25.843881" elapsed="0.000474"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:25.844871" 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-10-06T01:27:25.844998" 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-10-06T01:27:25.844696" elapsed="0.000336"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.845728" level="INFO">Attempting to execute command "ip tuntap add mode tap vport2" on remote system "10.30.170.234" 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-10-06T01:27:25.845291" elapsed="0.000498"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:25.846456" level="INFO">${conn_id} = 431</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-10-06T01:27:25.846030" elapsed="0.000460"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:27:25.847635" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:27:25.847751" 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-10-06T01:27:25.847276" elapsed="0.000507"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:25.847986" elapsed="0.000410"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:27:25.849481" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:27:26.235782" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:27:23 UTC 2026

  System load:  0.03               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:27:25 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:27:25.849148" elapsed="0.386744"/>
</kw>
<msg time="2026-10-06T01:27:26.235960" 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-10-06T01:27:25.848618" elapsed="0.387411"/>
</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-10-06T01:27:25.846778" elapsed="0.389342"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:27:26.236557" level="INFO">Executing command 'ip tuntap add mode tap vport2'.</msg>
<msg time="2026-10-06T01:27:26.249387" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-10-06T01:27:26.249599" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:27:26.249670" level="INFO">${stderr} = ioctl(TUNSETIFF): Operation not permitted</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-10-06T01:27:26.236366" elapsed="0.013346"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:26.249877" elapsed="0.000217"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:26.250609" level="INFO">ioctl(TUNSETIFF): Operation not permitted</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:26.250342" elapsed="0.000308"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:27:26.250856" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:26.250744" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:26.250720" elapsed="0.000204"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:27:26.251054" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:26.250972" elapsed="0.000137"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:26.250958" elapsed="0.000173"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:27:26.251164" elapsed="0.000013"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:26.251918" elapsed="0.000287"/>
</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-10-06T01:27:26.252400" elapsed="0.000157"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:26.252714" elapsed="0.000148"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:26.251479" elapsed="0.001432"/>
</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-10-06T01:27:25.843278" elapsed="0.409704"/>
</kw>
<msg time="2026-10-06T01:27:26.253029" 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-10-06T01:27:25.842175" elapsed="0.410901"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ip tuntap add mode tap vport2</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:27:25.841576" elapsed="0.411573"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:26.255219" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:26.254984" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:26.254966" elapsed="0.000327"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:26.255620" 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-10-06T01:27:26.255728" 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-10-06T01:27:26.255495" elapsed="0.000258"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:26.256225" level="INFO">Attempting to execute command "ifconfig vport1 up" on remote system "10.30.170.234" 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-10-06T01:27:26.255939" elapsed="0.000328"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:26.256773" level="INFO">${conn_id} = 433</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-10-06T01:27:26.256455" elapsed="0.000342"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:27:26.257618" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:27:26.257702" 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-10-06T01:27:26.257363" elapsed="0.000362"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:26.257871" elapsed="0.000283"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:27:26.258937" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:27:26.644936" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:27:23 UTC 2026

  System load:  0.03               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:27:26 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:27:26.258706" elapsed="0.386334"/>
</kw>
<msg time="2026-10-06T01:27:26.645102" 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-10-06T01:27:26.258330" elapsed="0.386837"/>
</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-10-06T01:27:26.256990" elapsed="0.388269"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:27:26.645714" level="INFO">Executing command 'ifconfig vport1 up'.</msg>
<msg time="2026-10-06T01:27:26.658533" level="INFO">Command exited with return code 255.</msg>
<msg time="2026-10-06T01:27:26.658725" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:27:26.658796" level="INFO">${stderr} = vport1: ERROR while getting interface flags: No such device</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-10-06T01:27:26.645506" elapsed="0.013327"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:26.659063" elapsed="0.000302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:26.660050" level="INFO">vport1: ERROR while getting interface flags: No such device</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:26.659673" elapsed="0.000505"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:27:26.660442" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:26.660279" elapsed="0.000227"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:26.660248" elapsed="0.000291"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:27:26.660747" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:27:26.660608" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:26.660588" elapsed="0.000267"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:27:26.660898" elapsed="0.000017"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:26.661920" elapsed="0.000408"/>
</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-10-06T01:27:26.662583" elapsed="0.000454"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:26.663238" elapsed="0.000144"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:26.661322" elapsed="0.002127"/>
</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-10-06T01:27:26.254543" elapsed="0.409002"/>
</kw>
<msg time="2026-10-06T01:27:26.663609" 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-10-06T01:27:26.253780" elapsed="0.409922"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ifconfig vport1 up</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:27:26.253338" elapsed="0.410489"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:26.666653" elapsed="0.000060"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:26.666289" elapsed="0.000482"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:26.666263" elapsed="0.000546"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:26.667268" 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-10-06T01:27:26.667414" 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-10-06T01:27:26.667092" elapsed="0.000357"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:26.668137" level="INFO">Attempting to execute command "ifconfig vport2 up" on remote system "10.30.170.234" 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-10-06T01:27:26.667732" elapsed="0.000464"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:26.668893" level="INFO">${conn_id} = 435</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-10-06T01:27:26.668456" elapsed="0.000470"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:27:26.670085" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:27:26.670181" 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-10-06T01:27:26.669735" elapsed="0.000476"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:26.670430" elapsed="0.000417"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:27:26.671940" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:27:27.053094" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:27:23 UTC 2026

  System load:  0.03               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:27:26 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:27:26.671594" elapsed="0.381669"/>
</kw>
<msg time="2026-10-06T01:27:27.053347" 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-10-06T01:27:26.671072" elapsed="0.382342"/>
</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-10-06T01:27:26.669196" elapsed="0.384313"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:27:27.053971" level="INFO">Executing command 'ifconfig vport2 up'.</msg>
<msg time="2026-10-06T01:27:27.066832" level="INFO">Command exited with return code 255.</msg>
<msg time="2026-10-06T01:27:27.066990" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:27:27.067044" level="INFO">${stderr} = vport2: ERROR while getting interface flags: No such device</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-10-06T01:27:27.053784" elapsed="0.013290"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:27.067305" elapsed="0.000273"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.068258" level="INFO">vport2: ERROR while getting interface flags: No such device</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:27.067910" elapsed="0.000421"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:27:27.068574" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:27.068430" elapsed="0.000206"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.068401" elapsed="0.000266"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:27:27.068878" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-10-06T01:27:27.068763" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.068743" elapsed="0.000242"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:27:27.069028" elapsed="0.000017"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:27.070318" elapsed="0.000412"/>
</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-10-06T01:27:27.070984" elapsed="0.000191"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:27.071387" elapsed="0.000124"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:27.069748" elapsed="0.001829"/>
</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-10-06T01:27:26.665578" elapsed="0.406093"/>
</kw>
<msg time="2026-10-06T01:27:27.071756" 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-10-06T01:27:26.664817" elapsed="0.407002"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ifconfig vport2 up</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:27:26.664130" elapsed="0.407786"/>
</kw>
<doc>Create Tap Device vport1 and vport2 to add to the bridge br-s1 using OVS command.</doc>
<status status="PASS" start="2026-10-06T01:27:25.441072" elapsed="1.630915"/>
</kw>
<doc>Create tap devices to add to the bridge in ovs</doc>
<status status="PASS" start="2026-10-06T01:27:25.119467" elapsed="1.952658"/>
</test>
<test id="s1-s2-s1-t7" name="Add Tap Device Manually and Verify Before Fail" line="48">
<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-10-06T01:27:27.074469" elapsed="0.000404"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:27.074085" elapsed="0.000871"/>
</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-10-06T01:27:27.076257" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:27.076126" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.076101" elapsed="0.000262"/>
</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-10-06T01:27:27.079253" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:27.079138" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.079115" elapsed="0.000247"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.080639" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:27.080159" elapsed="0.000515"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.081286" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:27.080909" elapsed="0.000428"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:27.081394" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:27:27.081625" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:27.079643" elapsed="0.002015"/>
</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-10-06T01:27:27.085640" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:27.085513" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.085487" elapsed="0.000269"/>
</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-10-06T01:27:27.087464" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:27.087339" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.087313" elapsed="0.000243"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:27.088167" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:27.087814" elapsed="0.000387"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:27.088759" 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-10-06T01:27:27.088440" elapsed="0.000362"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:27.123497" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:27.089754" elapsed="0.033968"/>
</kw>
<msg time="2026-10-06T01:27:27.123889" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:27.123931" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:27.089071" elapsed="0.034894"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:27.201174" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:27.124586" elapsed="0.076802"/>
</kw>
<msg time="2026-10-06T01:27:27.201552" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:27.201596" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:27.124132" elapsed="0.077500"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.201962" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:27.201747" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.201725" elapsed="0.000335"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.202603" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:27.202242" elapsed="0.000466"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.202974" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:27.202773" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.202756" elapsed="0.000330"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:27.203153" elapsed="0.000038"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:27.205736" elapsed="0.000478"/>
</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-10-06T01:27:27.207444" elapsed="0.000474"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:27.209090" elapsed="0.000329"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:27.204015" elapsed="0.005471"/>
</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-10-06T01:27:27.203487" elapsed="0.006114"/>
</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="PASS" start="2026-10-06T01:27:27.086937" elapsed="0.122766"/>
</kw>
<msg time="2026-10-06T01:27:27.209836" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:27.209877" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:27.085975" elapsed="0.123937"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:27.210069" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:27.209983" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.209966" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:27.210491" elapsed="0.000024"/>
</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-10-06T01:27:27.210917" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:27.210983" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:27.085058" elapsed="0.126013"/>
</kw>
<msg time="2026-10-06T01:27:27.211156" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:27.211195" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:27.082252" elapsed="0.128976"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.211531" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:27.211311" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.211282" elapsed="0.000320"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:27.082033" elapsed="0.129590"/>
</iter>
<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-10-06T01:27:27.214239" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:27.214154" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.214136" elapsed="0.000182"/>
</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-10-06T01:27:27.215728" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:27.215616" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.215599" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:27.216160" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:27.215934" elapsed="0.000251"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:27.216566" 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-10-06T01:27:27.216361" elapsed="0.000231"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:27.248745" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:27.217184" elapsed="0.031751"/>
</kw>
<msg time="2026-10-06T01:27:27.249093" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:27.249135" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:27.216767" elapsed="0.032402"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:27.322469" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:27.249795" elapsed="0.072859"/>
</kw>
<msg time="2026-10-06T01:27:27.322833" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:27.322874" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:27.249352" elapsed="0.073558"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.323191" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:27.322982" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.322963" elapsed="0.000395"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.323939" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:27.323545" elapsed="0.000480"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.324306" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:27.324089" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.324072" elapsed="0.000341"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:27.324449" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:27.326929" elapsed="0.000486"/>
</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-10-06T01:27:27.328651" elapsed="0.000486"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:27.330365" elapsed="0.000449"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:27.325248" elapsed="0.005637"/>
</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-10-06T01:27:27.324750" elapsed="0.006251"/>
</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="PASS" start="2026-10-06T01:27:27.215352" elapsed="0.115726"/>
</kw>
<msg time="2026-10-06T01:27:27.331160" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:27.331199" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:27.214501" elapsed="0.116733"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:27.331403" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:27.331317" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.331299" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.331812" elapsed="0.000024"/>
</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-10-06T01:27:27.332113" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:27.332177" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:27.213850" elapsed="0.118412"/>
</kw>
<msg time="2026-10-06T01:27:27.332384" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:27.332441" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:27.211902" elapsed="0.120578"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.332787" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:27.332552" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.332535" elapsed="0.000324"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:27.211758" elapsed="0.121122"/>
</iter>
<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-10-06T01:27:27.335596" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:27.335507" elapsed="0.000134"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.335488" elapsed="0.000174"/>
</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-10-06T01:27:27.336822" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:27.336735" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.336717" elapsed="0.000169"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:27.337257" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:27.337028" elapsed="0.000254"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:27.337648" 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-10-06T01:27:27.337465" elapsed="0.000264"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:27.369698" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:27.338330" elapsed="0.031547"/>
</kw>
<msg time="2026-10-06T01:27:27.370052" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:27.370094" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:27.337891" elapsed="0.032240"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:27.442756" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:27.370759" elapsed="0.072179"/>
</kw>
<msg time="2026-10-06T01:27:27.443095" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:27.443137" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:27.370313" elapsed="0.072859"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.443464" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:27.443242" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.443223" elapsed="0.000336"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.444097" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:27.443761" elapsed="0.000421"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.444472" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:27.444243" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.444226" elapsed="0.000343"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:27.444599" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:27.447135" elapsed="0.000490"/>
</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-10-06T01:27:27.448880" elapsed="0.000471"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:27.450923" elapsed="0.000310"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:27.445441" elapsed="0.005871"/>
</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-10-06T01:27:27.444891" elapsed="0.006540"/>
</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="PASS" start="2026-10-06T01:27:27.336450" elapsed="0.115057"/>
</kw>
<msg time="2026-10-06T01:27:27.451587" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:27.451630" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:27.335828" elapsed="0.115928"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:27.451923" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:27.451834" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.451816" elapsed="0.000187"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.452338" elapsed="0.000026"/>
</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-10-06T01:27:27.452656" elapsed="0.000041"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:27.452742" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:27.335187" elapsed="0.117645"/>
</kw>
<msg time="2026-10-06T01:27:27.452952" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:27.452996" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:27.333130" elapsed="0.119902"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.453334" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:27.453101" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.453084" elapsed="0.000322"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:27.332992" elapsed="0.120435"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:27.081771" elapsed="0.371684"/>
</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-10-06T01:27:27.078662" elapsed="0.374885"/>
</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-10-06T01:27:27.075762" elapsed="0.377839"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:27.075166" elapsed="0.378479"/>
</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-10-06T01:27:27.073440" elapsed="0.380353"/>
</kw>
<kw name="Add Sample Tap Device To The Manual Bridge And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.457413" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:27.457159" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.457141" elapsed="0.000347"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:27.457828" 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-10-06T01:27:27.457920" 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-10-06T01:27:27.457696" elapsed="0.000248"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.458435" level="INFO">Attempting to execute command "sudo ovs-vsctl add-port br-s1 vport1 -- add-port br-s1 vport2" on remote system "10.30.170.234" 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-10-06T01:27:27.458131" elapsed="0.000347"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:27.458969" level="INFO">${conn_id} = 440</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-10-06T01:27:27.458652" elapsed="0.000341"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.459883" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:27:27.459952" 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-10-06T01:27:27.459602" elapsed="0.000372"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:27.460122" elapsed="0.000292"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:27:27.461183" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:27:27.773763" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:27:23 UTC 2026

  System load:  0.03               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:27:26 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:27:27.460953" elapsed="0.312970"/>
</kw>
<msg time="2026-10-06T01:27:27.774028" 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-10-06T01:27:27.460575" elapsed="0.313538"/>
</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-10-06T01:27:27.459187" elapsed="0.315116"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:27:27.774848" level="INFO">Executing command 'sudo ovs-vsctl add-port br-s1 vport1 -- add-port br-s1 vport2'.</msg>
<msg time="2026-10-06T01:27:27.828394" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:27:27.828627" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:27:27.828762" level="INFO">${stderr} = ovs-vsctl: Error detected while setting up 'vport1': could not open network device vport1 (No such device).  See ovs-vswitchd log for details.
ovs-vsctl: Error detected while setting up 'vport2': coul...</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-10-06T01:27:27.774597" elapsed="0.054220"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:27.829165" elapsed="0.000450"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.830716" level="INFO">ovs-vsctl: Error detected while setting up 'vport1': could not open network device vport1 (No such device).  See ovs-vswitchd log for details.
ovs-vsctl: Error detected while setting up 'vport2': could not open network device vport2 (No such device).  See ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/var/log/openvswitch".</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:27.830120" elapsed="0.000700"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:27:27.831188" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:27.830970" elapsed="0.000349"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.830925" elapsed="0.000445"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:27:27.831662" elapsed="0.000086"/>
</return>
<status status="PASS" start="2026-10-06T01:27:27.831479" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.831447" elapsed="0.000420"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:27:27.831935" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:27.833623" elapsed="0.000715"/>
</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-10-06T01:27:27.834782" elapsed="0.000309"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:27.835436" elapsed="0.000196"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:27.832588" elapsed="0.003186"/>
</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-10-06T01:27:27.456738" elapsed="0.379192"/>
</kw>
<msg time="2026-10-06T01:27:27.836033" 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-10-06T01:27:27.456171" elapsed="0.379962"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-port br-s1 vport1 -- add-port br-s1 vport2</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:27:27.455757" elapsed="0.380551"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.837510" level="INFO">${dictionary_operational} = {'vport1': '2', 'vport2': '2'}</msg>
<var>${dictionary_operational}</var>
<arg>vport1=2</arg>
<arg>vport2=2</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:27:27.836797" elapsed="0.000769"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.838713" level="INFO">${dictionary_config} = {'vport1': '0', 'vport2': '0'}</msg>
<var>${dictionary_config}</var>
<arg>vport1=0</arg>
<arg>vport2=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:27:27.838020" elapsed="0.000750"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.848902" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:27.848109" elapsed="0.000850"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.849944" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:27.849312" elapsed="0.000686"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:27.850088" elapsed="0.000058"/>
</return>
<msg time="2026-10-06T01:27:27.850391" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:27.847260" elapsed="0.003182"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.856653" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:27:27.855999" elapsed="0.000746"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:27:27.856914" elapsed="0.000063"/>
</return>
<msg time="2026-10-06T01:27:27.857199" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:27:27.855149" elapsed="0.002101"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.859970" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:27.859454" elapsed="0.000575"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.860610" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:27.860304" elapsed="0.000362"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:27.868819" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:27.869014" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '144'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:27:27.869180" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:27.861092" elapsed="0.008122"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:27.860773" elapsed="0.008500"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.869554" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:27.869333" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.860749" elapsed="0.008916"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.871511" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:27.871028" elapsed="0.000546"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:27.870672" elapsed="0.000946"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.870646" elapsed="0.001004"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.872475" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:27.872080" elapsed="0.000453"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:27.871751" elapsed="0.000825"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.871728" elapsed="0.000880"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.873443" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:27.872869" elapsed="0.000623"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.873903" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:27.873587" elapsed="0.000391"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.874619" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:27.874229" elapsed="0.000424"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:27.874010" elapsed="0.000709"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.873561" elapsed="0.001186"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.875469" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:27.874983" elapsed="0.000521"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.875895" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:27.875593" elapsed="0.000373"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.876624" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:27.876210" elapsed="0.000449"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:27.875997" elapsed="0.000729"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.875569" elapsed="0.001186"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:27.876951" elapsed="0.000425"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:27:27.877945" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:27.877594" elapsed="0.000385"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:27:27.878188" elapsed="0.000315"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:27:27.870164" elapsed="0.008478"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:27:27.878869" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-10-06T01:27:27.878752" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.878728" elapsed="0.000251"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.879173" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:27:27.879262" elapsed="0.000039"/>
</return>
<msg time="2026-10-06T01:27:27.879589" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:27:27.857981" elapsed="0.021646"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:27:27.879720" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:27:27.879894" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:27:27.854174" elapsed="0.025756"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.881394" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:27.880941" elapsed="0.000541"/>
</kw>
<var name="${item}">vport1</var>
<status status="PASS" start="2026-10-06T01:27:27.880720" elapsed="0.000813"/>
</iter>
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.882305" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:27.881872" elapsed="0.000538"/>
</kw>
<var name="${item}">vport2</var>
<status status="PASS" start="2026-10-06T01:27:27.881636" elapsed="0.000828"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:27:27.880551" elapsed="0.001952"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:27:27.880216" elapsed="0.002358"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:27.850875" elapsed="0.031749"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.886243" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:27.885872" elapsed="0.000407"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:27:27.886355" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:27:27.886524" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:27:27.885395" elapsed="0.001162"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.888175" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:27.887867" elapsed="0.000366"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.891177" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:27.888511" elapsed="0.002725"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:27.903011" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01wo4j9u7mox61tr0ncscuykk72.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:27.903154" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:27:27.903305" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:27.891664" elapsed="0.011677"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:27.891342" elapsed="0.012054"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.903642" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:27.903429" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.891317" elapsed="0.012458"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.905590" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:27.905095" elapsed="0.000629"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:27.904761" elapsed="0.001011"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.904734" elapsed="0.001069"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.906612" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:27.906210" elapsed="0.000460"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:27.905875" elapsed="0.000863"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.905853" elapsed="0.000915"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.907504" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:27.907007" elapsed="0.000532"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.907937" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:27.907630" elapsed="0.000381"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.908717" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:27.908257" elapsed="0.000495"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:27.908041" elapsed="0.000759"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.907606" elapsed="0.001222"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.909560" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:27.909066" elapsed="0.000529"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.909993" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:27.909707" elapsed="0.000360"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.910728" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:27.910335" elapsed="0.000428"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:27.910097" elapsed="0.000712"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.909664" elapsed="0.001173"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:27.911034" elapsed="0.000429"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:27:27.912016" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:27.911702" elapsed="0.000347"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:27:27.912257" elapsed="0.000311"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:27:27.904218" elapsed="0.008457"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:27:27.912932" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-10-06T01:27:27.912810" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.912778" elapsed="0.000265"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.913239" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:27:27.913344" elapsed="0.000021"/>
</return>
<msg time="2026-10-06T01:27:27.913648" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:27:27.886988" elapsed="0.026716"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:27:27.913775" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:27:27.913943" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:27:27.884797" elapsed="0.029178"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.915497" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:27.915053" elapsed="0.000527"/>
</kw>
<var name="${item}">vport1</var>
<status status="PASS" start="2026-10-06T01:27:27.914831" elapsed="0.000800"/>
</iter>
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.916414" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:27.915978" elapsed="0.000532"/>
</kw>
<var name="${item}">vport2</var>
<status status="PASS" start="2026-10-06T01:27:27.915758" elapsed="0.000801"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:27:27.914666" elapsed="0.001930"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:27:27.914333" elapsed="0.002453"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:27.882770" elapsed="0.034061"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.920618" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:27.920227" elapsed="0.000427"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:27:27.920734" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:27:27.920907" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:27:27.919770" elapsed="0.001169"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.922631" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:27.922319" elapsed="0.000398"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.923337" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:27.923007" elapsed="0.000387"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:27.934787" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node08kx9y5d080lbj5jl4gkt6rg2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:27.934928" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:27:27.935045" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:27.923818" elapsed="0.011261"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:27.923479" elapsed="0.011655"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.935401" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:27.935166" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.923456" elapsed="0.012058"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.937319" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:27.936847" elapsed="0.000534"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:27.936483" elapsed="0.000944"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.936457" elapsed="0.001000"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.938257" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:27.937880" elapsed="0.000450"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:27.937529" elapsed="0.000845"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.937507" elapsed="0.000904"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.939180" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:27.938672" elapsed="0.000544"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.939608" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:27.939324" elapsed="0.000380"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.940344" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:27.939956" elapsed="0.000423"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:27.939738" elapsed="0.000702"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.939299" elapsed="0.001172"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.941213" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:27.940736" elapsed="0.000512"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.941635" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:27.941355" elapsed="0.000374"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.942359" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:27.941977" elapsed="0.000416"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:27.941762" elapsed="0.000677"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.941332" elapsed="0.001134"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:27.942659" elapsed="0.000455"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:27:27.943733" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:27.943404" elapsed="0.000364"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:27:27.943979" elapsed="0.000292"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:27:27.935976" elapsed="0.008390"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:27:27.944592" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-10-06T01:27:27.944475" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.944449" elapsed="0.000274"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.944919" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:27:27.945007" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:27:27.945327" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:27:27.921369" elapsed="0.023994"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:27:27.945427" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:27:27.945597" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:27:27.919109" elapsed="0.026520"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.947297" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:27.946619" elapsed="0.000766"/>
</kw>
<var name="${item}">vport1</var>
<status status="PASS" start="2026-10-06T01:27:27.946400" elapsed="0.001036"/>
</iter>
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.948205" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:27.947781" elapsed="0.000522"/>
</kw>
<var name="${item}">vport2</var>
<status status="PASS" start="2026-10-06T01:27:27.947540" elapsed="0.000814"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:27:27.946242" elapsed="0.002150"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:27:27.945929" elapsed="0.002530"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:27.916943" elapsed="0.031560"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:27.850553" elapsed="0.097986"/>
</for>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:27:27.846152" elapsed="0.102452"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:27:27.839206" elapsed="0.109467"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.954478" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:27.954104" elapsed="0.000399"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.954945" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:27.954653" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:27.955010" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:27:27.955136" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:27.953748" elapsed="0.001412"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.957790" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:27:27.957499" elapsed="0.000316"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:27:27.957857" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:27:27.957977" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:27:27.957159" elapsed="0.000878"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.959199" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:27.958978" elapsed="0.000263"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.959861" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:27.959573" elapsed="0.000330"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:27.967392" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:27.967554" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '7159'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;a4b2ef02-355e-4376-b0ed-3873f84c597b&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;9fdec17e-2647-4848-9d17-4ded87bc9d92&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;25f8ee34-9ebc-4e0b-acae-d1da08a0fdca&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;02:ef:b2:a4:76:43&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;12&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vport2&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;6b35f6a6-fe25-4ddc-935d-177d79cd55b8&lt;/port-uuid&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;30e12c14-f696-4ba3-8477-ca6f648ab8f5&lt;/interface-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vport2&lt;/name&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vx1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;d36c5193-7ced-459f-8754-6bf9091a30a1&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vx1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;26020ccf-01d3-482d-ad16-aa762be6d178&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vport1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;e19095f0-d19b-48b7-b03b-2e2fb094c09e&lt;/port-uuid&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;4f965fe7-2a17-4c8e-be68-b0f2262afd0b&lt;/interface-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vport1&lt;/name&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:02:ef:b2:a4:76:43&lt;/datapath-id&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:27:27.967780" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:27.960191" elapsed="0.007615"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:27.959967" elapsed="0.007877"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.968019" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:27.967869" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.959950" elapsed="0.008147"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.969455" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;a4b2ef02-355e-4376-b0ed-3873f84c597b&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;9fdec17e-2647-4848-9d17-4ded87bc9d92&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;25f8ee34-9ebc-4e0b-acae-d1da08a0fdca&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;02:ef:b2:a4:76:43&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;12&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vport2&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;6b35f6a6-fe25-4ddc-935d-177d79cd55b8&lt;/port-uuid&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;30e12c14-f696-4ba3-8477-ca6f648ab8f5&lt;/interface-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vport2&lt;/name&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vx1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;d36c5193-7ced-459f-8754-6bf9091a30a1&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vx1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;26020ccf-01d3-482d-ad16-aa762be6d178&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vport1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;e19095f0-d19b-48b7-b03b-2e2fb094c09e&lt;/port-uuid&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;4f965fe7-2a17-4c8e-be68-b0f2262afd0b&lt;/interface-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vport1&lt;/name&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:02:ef:b2:a4:76:43&lt;/datapath-id&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:27.969016" elapsed="0.000596"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:27.968780" elapsed="0.000865"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.968762" elapsed="0.000908"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.970245" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:27.969976" elapsed="0.000327"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:27.969740" elapsed="0.000595"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.969724" elapsed="0.000634"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.970891" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:27.970527" elapsed="0.000389"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.971180" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:27.970980" elapsed="0.000253"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.971866" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:27.971424" elapsed="0.000467"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:27.971255" elapsed="0.000670"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.970963" elapsed="0.000983"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.972476" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:27.972120" elapsed="0.000381"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.972794" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:27.972566" elapsed="0.000283"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.973309" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:27.973027" elapsed="0.000307"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:27.972872" elapsed="0.000502"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.972549" elapsed="0.000846"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:27.973536" elapsed="0.000311"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:27:27.974224" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:27.974004" elapsed="0.000244"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:27:27.974416" elapsed="0.000210"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:27:27.968424" elapsed="0.006273"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:27:27.974843" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:27.974762" elapsed="0.000136"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.974745" elapsed="0.000176"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.975060" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:27:27.975123" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:27:27.975408" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:27:27.958354" elapsed="0.017083"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:27:27.975483" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:27:27.975604" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:27:27.956748" elapsed="0.018882"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.976659" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:27.976345" elapsed="0.000420"/>
</kw>
<var name="${item}">vport1</var>
<status status="PASS" start="2026-10-06T01:27:27.976174" elapsed="0.000627"/>
</iter>
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.977342" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:27.977030" elapsed="0.000401"/>
</kw>
<var name="${item}">vport2</var>
<status status="PASS" start="2026-10-06T01:27:27.976874" elapsed="0.000626"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:27:27.976071" elapsed="0.001456"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:27:27.975848" elapsed="0.001728"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:27.955328" elapsed="0.022279"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.980126" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:27.979861" elapsed="0.000290"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:27:27.980192" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:27:27.980326" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:27:27.979523" elapsed="0.000828"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.981490" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:27.981257" elapsed="0.000274"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.981952" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:27.981733" elapsed="0.000259"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:27.993111" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01wo4j9u7mox61tr0ncscuykk72.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:27.993261" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '3129'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"a4b2ef02-355e-4376-b0ed-3873f84c597b","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"9fdec17e-2647-4848-9d17-4ded87bc9d92","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"25f8ee34-9ebc-4e0b-acae-d1da08a0fdca","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"02:ef:b2:a4:76:43","ovsdb:ofport":65534,"ovsdb:ifindex":12},{"tp-id":"vport2","ovsdb:port-uuid":"6b35f6a6-fe25-4ddc-935d-177d79cd55b8","ovsdb:interface-uuid":"30e12c14-f696-4ba3-8477-ca6f648ab8f5","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport2","ovsdb:ingress-policing-rate":0},{"tp-id":"vx1","ovsdb:port-uuid":"d36c5193-7ced-459f-8754-6bf9091a30a1","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"26020ccf-01d3-482d-ad16-aa762be6d178","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"},{"tp-id":"vport1","ovsdb:port-uuid":"e19095f0-d19b-48b7-b03b-2e2fb094c09e","ovsdb:interface-uuid":"4f965fe7-2a17-4c8e-be68-b0f2262afd0b","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport1","ovsdb:ingress-policing-rate":0}],"ovsdb:datapath-id":"00:00:02:ef:b2:a4:76:43"}]}]}} 
 </msg>
<msg time="2026-10-06T01:27:27.993382" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:27.982277" elapsed="0.011129"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:27.982053" elapsed="0.011392"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.993619" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:27.993468" elapsed="0.000229"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.982036" elapsed="0.011684"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.995018" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"a4b2ef02-355e-4376-b0ed-3873f84c597b","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"9fdec17e-2647-4848-9d17-4ded87bc9d92","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"25f8ee34-9ebc-4e0b-acae-d1da08a0fdca","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"02:ef:b2:a4:76:43","ovsdb:ofport":65534,"ovsdb:ifindex":12},{"tp-id":"vport2","ovsdb:port-uuid":"6b35f6a6-fe25-4ddc-935d-177d79cd55b8","ovsdb:interface-uuid":"30e12c14-f696-4ba3-8477-ca6f648ab8f5","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport2","ovsdb:ingress-policing-rate":0},{"tp-id":"vx1","ovsdb:port-uuid":"d36c5193-7ced-459f-8754-6bf9091a30a1","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"26020ccf-01d3-482d-ad16-aa762be6d178","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"},{"tp-id":"vport1","ovsdb:port-uuid":"e19095f0-d19b-48b7-b03b-2e2fb094c09e","ovsdb:interface-uuid":"4f965fe7-2a17-4c8e-be68-b0f2262afd0b","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport1","ovsdb:ingress-policing-rate":0}],"ovsdb:datapath-id":"00:00:02:ef:b2:a4:76:43"}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:27.994623" elapsed="0.000490"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:27.994384" elapsed="0.000763"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.994367" elapsed="0.000802"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.995921" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:27.995470" elapsed="0.000493"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:27.995221" elapsed="0.000774"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.995205" elapsed="0.000812"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.996560" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:27.996189" elapsed="0.000396"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.996873" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:27.996649" elapsed="0.000277"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.997385" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:27.997103" elapsed="0.000307"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:27.996948" elapsed="0.000495"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.996632" elapsed="0.000832"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.997998" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:27.997635" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:27.998302" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:27.998089" elapsed="0.000268"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:27.998812" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:27.998534" elapsed="0.000302"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:27.998379" elapsed="0.000490"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:27.998071" elapsed="0.000818"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:27.999029" elapsed="0.000309"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:27:27.999729" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:27.999496" elapsed="0.000258"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:27:27.999903" elapsed="0.000207"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:27:27.994032" elapsed="0.006133"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:27:28.000321" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:28.000226" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.000209" elapsed="0.000190"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:28.000544" elapsed="0.000019"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:27:28.000607" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:27:28.000885" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:27:27.980642" elapsed="0.020269"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:27:28.000957" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:27:28.001077" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:27:27.979103" elapsed="0.021998"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.002128" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:28.001821" elapsed="0.000381"/>
</kw>
<var name="${item}">vport1</var>
<status status="PASS" start="2026-10-06T01:27:28.001642" elapsed="0.000596"/>
</iter>
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.002794" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:28.002481" elapsed="0.000387"/>
</kw>
<var name="${item}">vport2</var>
<status status="PASS" start="2026-10-06T01:27:28.002325" elapsed="0.000611"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:27:28.001540" elapsed="0.001424"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:27:28.001318" elapsed="0.001695"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:27.977701" elapsed="0.025343"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.005590" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:28.005322" elapsed="0.000293"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:27:28.005657" elapsed="0.000043"/>
</return>
<msg time="2026-10-06T01:27:28.005798" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:27:28.004981" elapsed="0.000840"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.006977" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:28.006754" elapsed="0.000264"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.007449" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:28.007206" elapsed="0.000282"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:28.019119" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node08kx9y5d080lbj5jl4gkt6rg2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:28.019269" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '3129'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"a4b2ef02-355e-4376-b0ed-3873f84c597b","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"9fdec17e-2647-4848-9d17-4ded87bc9d92","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"25f8ee34-9ebc-4e0b-acae-d1da08a0fdca","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"02:ef:b2:a4:76:43","ovsdb:ofport":65534,"ovsdb:ifindex":12},{"tp-id":"vport2","ovsdb:port-uuid":"6b35f6a6-fe25-4ddc-935d-177d79cd55b8","ovsdb:interface-uuid":"30e12c14-f696-4ba3-8477-ca6f648ab8f5","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport2","ovsdb:ingress-policing-rate":0},{"tp-id":"vx1","ovsdb:port-uuid":"d36c5193-7ced-459f-8754-6bf9091a30a1","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"26020ccf-01d3-482d-ad16-aa762be6d178","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"},{"tp-id":"vport1","ovsdb:port-uuid":"e19095f0-d19b-48b7-b03b-2e2fb094c09e","ovsdb:interface-uuid":"4f965fe7-2a17-4c8e-be68-b0f2262afd0b","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport1","ovsdb:ingress-policing-rate":0}],"ovsdb:datapath-id":"00:00:02:ef:b2:a4:76:43"}]}]}} 
 </msg>
<msg time="2026-10-06T01:27:28.019389" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:28.007795" elapsed="0.011618"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:28.007550" elapsed="0.011901"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:28.019626" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:28.019476" elapsed="0.000229"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.007532" elapsed="0.012194"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.021201" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"a4b2ef02-355e-4376-b0ed-3873f84c597b","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"9fdec17e-2647-4848-9d17-4ded87bc9d92","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"25f8ee34-9ebc-4e0b-acae-d1da08a0fdca","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"02:ef:b2:a4:76:43","ovsdb:ofport":65534,"ovsdb:ifindex":12},{"tp-id":"vport2","ovsdb:port-uuid":"6b35f6a6-fe25-4ddc-935d-177d79cd55b8","ovsdb:interface-uuid":"30e12c14-f696-4ba3-8477-ca6f648ab8f5","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport2","ovsdb:ingress-policing-rate":0},{"tp-id":"vx1","ovsdb:port-uuid":"d36c5193-7ced-459f-8754-6bf9091a30a1","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"26020ccf-01d3-482d-ad16-aa762be6d178","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"},{"tp-id":"vport1","ovsdb:port-uuid":"e19095f0-d19b-48b7-b03b-2e2fb094c09e","ovsdb:interface-uuid":"4f965fe7-2a17-4c8e-be68-b0f2262afd0b","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport1","ovsdb:ingress-policing-rate":0}],"ovsdb:datapath-id":"00:00:02:ef:b2:a4:76:43"}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:28.020825" elapsed="0.000487"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:28.020393" elapsed="0.000953"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.020376" elapsed="0.000993"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.021949" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:28.021658" elapsed="0.000365"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:28.021421" elapsed="0.000635"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.021405" elapsed="0.000674"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.022613" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:28.022254" elapsed="0.000384"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:28.022923" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:28.022719" elapsed="0.000257"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.023508" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:28.023152" elapsed="0.000380"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:28.022998" elapsed="0.000567"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.022702" elapsed="0.000883"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.024116" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:28.023776" elapsed="0.000364"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:28.024420" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:28.024205" elapsed="0.000269"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.024928" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:28.024652" elapsed="0.000300"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:28.024496" elapsed="0.000489"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.024188" elapsed="0.000816"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:28.025145" elapsed="0.000356"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:27:28.025900" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:28.025659" elapsed="0.000265"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:27:28.026089" elapsed="0.000225"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:27:28.020043" elapsed="0.006328"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:27:28.026514" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:27:28.026433" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.026416" elapsed="0.000177"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:28.026770" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:27:28.026835" elapsed="0.000015"/>
</return>
<msg time="2026-10-06T01:27:28.027390" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:27:28.006114" elapsed="0.021303"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:27:28.027463" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:27:28.027585" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:27:28.004538" elapsed="0.023071"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.028637" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:28.028328" elapsed="0.000400"/>
</kw>
<var name="${item}">vport1</var>
<status status="PASS" start="2026-10-06T01:27:28.028158" elapsed="0.000606"/>
</iter>
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.029303" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:28.028995" elapsed="0.000382"/>
</kw>
<var name="${item}">vport2</var>
<status status="PASS" start="2026-10-06T01:27:28.028839" elapsed="0.000610"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:27:28.028054" elapsed="0.001423"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:27:28.027830" elapsed="0.001695"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:28.003124" elapsed="0.026432"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:27.955205" elapsed="0.074376"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:27:27.953234" elapsed="0.076394"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:27:27.948979" elapsed="0.080720"/>
</kw>
<doc>Add Tap Device vport1 and vport2 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:27:27.455369" elapsed="0.574392"/>
</kw>
<doc>Add tap devices to the bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="PASS" start="2026-10-06T01:27:27.072660" elapsed="0.957208"/>
</test>
<test id="s1-s2-s1-t8" name="Delete the Bridge Manually and Verify Before Fail" line="52">
<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-10-06T01:27:28.031377" elapsed="0.000202"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:28.031113" elapsed="0.000515"/>
</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-10-06T01:27:28.032556" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:28.032469" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.032451" elapsed="0.000169"/>
</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-10-06T01:27:28.034673" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:28.034588" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.034571" elapsed="0.000183"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.035657" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:28.035330" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.036119" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:28.035850" elapsed="0.000293"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:28.036183" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:27:28.036322" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:28.034958" elapsed="0.001389"/>
</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-10-06T01:27:28.038774" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:28.038672" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.038655" elapsed="0.000182"/>
</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-10-06T01:27:28.039999" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:28.039915" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.039898" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:28.040445" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:28.040205" elapsed="0.000279"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:28.040850" 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-10-06T01:27:28.040651" elapsed="0.000222"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:28.073875" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:28.041462" elapsed="0.032583"/>
</kw>
<msg time="2026-10-06T01:27:28.074251" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:28.074305" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:28.041027" elapsed="0.033314"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:28.171987" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:28.074950" elapsed="0.097268"/>
</kw>
<msg time="2026-10-06T01:27:28.172395" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:28.172436" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:28.074505" elapsed="0.097966"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:28.172794" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:28.172547" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.172526" elapsed="0.000366"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.173434" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:28.173074" elapsed="0.000445"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:28.173796" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:28.173581" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.173564" elapsed="0.000326"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:28.173922" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:28.176444" elapsed="0.000504"/>
</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-10-06T01:27:28.178165" elapsed="0.000641"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:28.180173" elapsed="0.000323"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:28.174759" elapsed="0.005804"/>
</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-10-06T01:27:28.174217" elapsed="0.006479"/>
</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="PASS" start="2026-10-06T01:27:28.039632" elapsed="0.141143"/>
</kw>
<msg time="2026-10-06T01:27:28.180857" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:28.180896" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:28.038984" elapsed="0.141946"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:28.181084" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:28.181000" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.180983" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:28.181502" elapsed="0.000024"/>
</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-10-06T01:27:28.181852" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:28.181918" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:28.038382" elapsed="0.143621"/>
</kw>
<msg time="2026-10-06T01:27:28.182085" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:28.182125" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:28.036693" elapsed="0.145466"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:28.182457" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:28.182228" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.182212" elapsed="0.000316"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:28.036538" elapsed="0.146011"/>
</iter>
<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-10-06T01:27:28.185021" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:28.184930" elapsed="0.000132"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.184913" elapsed="0.000199"/>
</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-10-06T01:27:28.186231" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:28.186141" elapsed="0.000132"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.186123" elapsed="0.000183"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:28.186694" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:28.186449" elapsed="0.000272"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:28.187060" 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-10-06T01:27:28.186882" elapsed="0.000202"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:28.219101" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:28.187665" elapsed="0.031634"/>
</kw>
<msg time="2026-10-06T01:27:28.219454" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:28.219495" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:28.187237" elapsed="0.032293"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:28.302305" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:28.220146" elapsed="0.082335"/>
</kw>
<msg time="2026-10-06T01:27:28.302635" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:28.302696" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:28.219723" elapsed="0.083009"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:28.303007" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:28.302802" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.302784" elapsed="0.000317"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.303628" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:28.303295" elapsed="0.000435"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:28.303989" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:28.303792" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.303775" elapsed="0.000307"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:28.304113" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:28.306574" elapsed="0.000495"/>
</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-10-06T01:27:28.308275" elapsed="0.000484"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:28.310123" elapsed="0.000476"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:28.304923" elapsed="0.005744"/>
</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-10-06T01:27:28.304395" elapsed="0.006405"/>
</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="PASS" start="2026-10-06T01:27:28.185875" elapsed="0.124999"/>
</kw>
<msg time="2026-10-06T01:27:28.310956" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:28.310995" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:28.185264" elapsed="0.125768"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:28.311187" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:28.311102" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.311084" elapsed="0.000232"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:28.311639" elapsed="0.000024"/>
</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-10-06T01:27:28.312033" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:28.312097" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:28.184624" elapsed="0.127557"/>
</kw>
<msg time="2026-10-06T01:27:28.312263" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:28.312316" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:28.182903" elapsed="0.129449"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:28.312636" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:28.312419" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.312403" elapsed="0.000320"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:28.182663" elapsed="0.130081"/>
</iter>
<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-10-06T01:27:28.315129" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:28.315039" elapsed="0.000132"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.315022" elapsed="0.000170"/>
</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-10-06T01:27:28.316305" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:28.316202" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.316185" elapsed="0.000182"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:28.316764" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:28.316508" elapsed="0.000281"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:28.317142" 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-10-06T01:27:28.316948" elapsed="0.000218"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:28.348915" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:28.317763" elapsed="0.031344"/>
</kw>
<msg time="2026-10-06T01:27:28.349268" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:28.349336" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:28.317330" elapsed="0.032042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:28.432014" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:28.349992" elapsed="0.082210"/>
</kw>
<msg time="2026-10-06T01:27:28.432378" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:28.432419" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:28.349537" elapsed="0.082917"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:28.432772" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:28.432532" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.432510" elapsed="0.000362"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.433410" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:28.433052" elapsed="0.000444"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:28.433830" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:28.433557" elapsed="0.000352"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.433540" elapsed="0.000392"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:28.433966" elapsed="0.000031"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:28.436705" elapsed="0.000499"/>
</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-10-06T01:27:28.438459" elapsed="0.000486"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:28.440353" elapsed="0.000489"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:28.434864" elapsed="0.006047"/>
</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-10-06T01:27:28.434261" elapsed="0.006768"/>
</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="PASS" start="2026-10-06T01:27:28.315938" elapsed="0.125168"/>
</kw>
<msg time="2026-10-06T01:27:28.441189" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:28.441228" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:28.315352" elapsed="0.125910"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:28.441429" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:28.441345" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.441328" elapsed="0.000177"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:28.441912" elapsed="0.000024"/>
</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-10-06T01:27:28.442214" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:28.442294" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:28.314746" elapsed="0.127636"/>
</kw>
<msg time="2026-10-06T01:27:28.442465" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:28.442504" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:28.312993" elapsed="0.129545"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:28.442844" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:28.442607" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.442591" elapsed="0.000324"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:28.312854" elapsed="0.130082"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:28.036393" elapsed="0.406572"/>
</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-10-06T01:27:28.034278" elapsed="0.408745"/>
</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-10-06T01:27:28.032202" elapsed="0.410876"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:28.031802" elapsed="0.411320"/>
</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-10-06T01:27:28.030772" elapsed="0.412403"/>
</kw>
<kw name="Delete Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:28.446738" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:28.446477" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.446460" elapsed="0.000355"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:28.447140" 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-10-06T01:27:28.447232" 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-10-06T01:27:28.447010" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.447803" level="INFO">Attempting to execute command "sudo ovs-vsctl del-br br-s1" on remote system "10.30.170.234" 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-10-06T01:27:28.447499" elapsed="0.000347"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:28.448338" level="INFO">${conn_id} = 445</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-10-06T01:27:28.448022" elapsed="0.000341"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.449207" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:27:28.449287" 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-10-06T01:27:28.448947" elapsed="0.000364"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:28.449460" elapsed="0.000301"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:27:28.450540" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:27:28.864085" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:27:23 UTC 2026

  System load:  0.03               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:27:27 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:27:28.450307" elapsed="0.413887"/>
</kw>
<msg time="2026-10-06T01:27:28.864266" 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-10-06T01:27:28.449923" elapsed="0.414426"/>
</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-10-06T01:27:28.448564" elapsed="0.415882"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:27:28.864905" level="INFO">Executing command 'sudo ovs-vsctl del-br br-s1'.</msg>
<msg time="2026-10-06T01:27:28.958419" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:27:28.958654" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:27:28.958783" level="INFO">${stderr} = </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-10-06T01:27:28.864713" elapsed="0.094125"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:28.959192" elapsed="0.000460"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.960788" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:28.960171" elapsed="0.000705"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:27:28.961260" elapsed="0.000058"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:28.961034" elapsed="0.000351"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.960988" elapsed="0.000447"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:27:28.961761" elapsed="0.000057"/>
</return>
<status status="PASS" start="2026-10-06T01:27:28.961544" elapsed="0.000342"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.961513" elapsed="0.000425"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:27:28.962006" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:28.963614" elapsed="0.000701"/>
</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-10-06T01:27:28.964751" elapsed="0.000314"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:28.965402" elapsed="0.000196"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:28.962667" elapsed="0.003065"/>
</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-10-06T01:27:28.446029" elapsed="0.519857"/>
</kw>
<msg time="2026-10-06T01:27:28.965990" 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-10-06T01:27:28.445485" elapsed="0.520606"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl del-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:27:28.445049" elapsed="0.521319"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.967519" level="INFO">${dictionary} = {'br-s1': '0'}</msg>
<var>${dictionary}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:27:28.966833" elapsed="0.000741"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.975019" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:28.974225" elapsed="0.000850"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.976081" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:28.975441" elapsed="0.000695"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:28.976226" elapsed="0.000087"/>
</return>
<msg time="2026-10-06T01:27:28.976545" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:28.973386" elapsed="0.003209"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.982587" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:27:28.981960" elapsed="0.000683"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:27:28.982765" elapsed="0.000060"/>
</return>
<msg time="2026-10-06T01:27:28.983040" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:27:28.981179" elapsed="0.001912"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.985797" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:28.985253" elapsed="0.000640"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:28.986841" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:28.986327" elapsed="0.000602"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:28.997833" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:28.998227" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3371'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:27:28.998622" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:28.987990" elapsed="0.010732"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:28.987441" elapsed="0.011371"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:28.999206" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:28.998867" elapsed="0.000501"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:28.987027" elapsed="0.012389"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.002505" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:29.001593" elapsed="0.001131"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:29.000996" elapsed="0.001802"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.000956" elapsed="0.001894"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.004171" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:29.003535" elapsed="0.000728"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:29.002963" elapsed="0.001395"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.002930" elapsed="0.001481"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.005673" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:29.004825" elapsed="0.000938"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.006387" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.005908" elapsed="0.000597"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.007545" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:29.006932" elapsed="0.000667"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:29.006555" elapsed="0.001118"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.005870" elapsed="0.001880"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.008940" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:29.008126" elapsed="0.000870"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.009608" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.009139" elapsed="0.000680"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.010867" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:29.010225" elapsed="0.000697"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:29.009876" elapsed="0.001119"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.009102" elapsed="0.001938"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:29.011369" elapsed="0.000682"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:27:29.012978" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:29.012422" elapsed="0.000610"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:27:29.013389" elapsed="0.000507"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:27:29.000167" elapsed="0.013852"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:27:29.014367" elapsed="0.000056"/>
</return>
<status status="PASS" start="2026-10-06T01:27:29.014157" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.014120" elapsed="0.000426"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.014885" elapsed="0.000047"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:27:29.015029" elapsed="0.000031"/>
</return>
<msg time="2026-10-06T01:27:29.015636" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:27:28.983828" elapsed="0.031901"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:27:29.015834" elapsed="0.000056"/>
</return>
<msg time="2026-10-06T01:27:29.016104" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:27:28.980202" elapsed="0.035960"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.018326" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:29.017826" elapsed="0.000599"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:27:29.017427" elapsed="0.001049"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:27:29.017168" elapsed="0.001349"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:27:29.016641" elapsed="0.001943"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:28.977010" elapsed="0.041616"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.024360" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:29.023964" elapsed="0.000432"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:27:29.024454" elapsed="0.000040"/>
</return>
<msg time="2026-10-06T01:27:29.024633" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:27:29.023498" elapsed="0.001166"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.026309" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:29.025983" elapsed="0.000386"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.026957" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:29.026629" elapsed="0.000384"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:29.039379" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01wo4j9u7mox61tr0ncscuykk72.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:29.039550" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '1397'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:27:29.039772" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:29.027430" elapsed="0.012377"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:29.027098" elapsed="0.012762"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.040103" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.039894" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.027075" elapsed="0.013136"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.042007" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:29.041507" elapsed="0.000573"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:29.041162" elapsed="0.000964"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.041137" elapsed="0.001021"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.042983" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:29.042582" elapsed="0.000459"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:29.042228" elapsed="0.000856"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.042207" elapsed="0.000908"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.043870" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:29.043371" elapsed="0.000534"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.044296" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.043996" elapsed="0.000376"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.045009" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:29.044621" elapsed="0.000421"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:29.044402" elapsed="0.000685"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.043973" elapsed="0.001141"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.045854" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:29.045367" elapsed="0.000522"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.046255" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.045978" elapsed="0.000370"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.046978" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:29.046593" elapsed="0.000419"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:29.046378" elapsed="0.000679"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.045955" elapsed="0.001129"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:29.047416" elapsed="0.000435"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:27:29.048400" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:29.048070" elapsed="0.000363"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:27:29.048639" elapsed="0.000312"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:27:29.040673" elapsed="0.008357"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:27:29.049227" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:27:29.049116" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.049093" elapsed="0.000259"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.049546" elapsed="0.000027"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:27:29.049674" elapsed="0.000043"/>
</return>
<msg time="2026-10-06T01:27:29.050025" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:27:29.025097" elapsed="0.024964"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:27:29.050124" elapsed="0.000042"/>
</return>
<msg time="2026-10-06T01:27:29.050323" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:27:29.022899" elapsed="0.027459"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.051805" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:29.051359" elapsed="0.000535"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:27:29.051119" elapsed="0.000826"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:27:29.050975" elapsed="0.001007"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:27:29.050641" elapsed="0.001406"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:29.018757" elapsed="0.033333"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.100661" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:29.100317" elapsed="0.000393"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:27:29.100766" elapsed="0.000041"/>
</return>
<msg time="2026-10-06T01:27:29.100913" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:27:29.099963" elapsed="0.000973"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.102130" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:29.101900" elapsed="0.000273"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.102599" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:29.102380" elapsed="0.000258"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:27:29.115563" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node08kx9y5d080lbj5jl4gkt6rg2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:27:29.115744" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '1397'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:27:29.115854" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:27:29.102982" elapsed="0.012897"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:29.102724" elapsed="0.013194"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.116096" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.115943" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.102702" elapsed="0.013473"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.117491" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:29.117129" elapsed="0.000478"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:29.116892" elapsed="0.000749"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.116874" elapsed="0.000790"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.118236" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:29.117969" elapsed="0.000321"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:29.117733" elapsed="0.000590"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.117717" elapsed="0.000628"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.118919" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:29.118529" elapsed="0.000415"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.119216" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.119010" elapsed="0.000322"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.119796" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:29.119515" elapsed="0.000306"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:29.119356" elapsed="0.000498"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.118992" elapsed="0.000881"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.120398" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:29.120042" elapsed="0.000381"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.120703" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.120487" elapsed="0.000270"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.121195" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:27:29.120934" elapsed="0.000285"/>
</kw>
<status status="PASS" start="2026-10-06T01:27:29.120779" elapsed="0.000473"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.120471" elapsed="0.000814"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:29.121432" elapsed="0.000313"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:27:29.122150" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:27:29.121908" elapsed="0.000267"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:27:29.122335" elapsed="0.000328"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:27:29.116534" elapsed="0.006209"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:27:29.122891" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:27:29.122807" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.122790" elapsed="0.000181"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.123114" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:27:29.123177" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:27:29.123423" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:27:29.101249" elapsed="0.022201"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:27:29.123496" elapsed="0.000024"/>
</return>
<msg time="2026-10-06T01:27:29.123617" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:27:29.099337" elapsed="0.024304"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.124718" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:27:29.124387" elapsed="0.000403"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:27:29.124214" elapsed="0.000612"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:27:29.124099" elapsed="0.000758"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:27:29.123868" elapsed="0.001038"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:29.052199" elapsed="0.072774"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:28.976737" elapsed="0.148265"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary {'br-s1': '0'}.</doc>
<status status="PASS" start="2026-10-06T01:27:28.972189" elapsed="0.152863"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:27:28.968043" elapsed="0.157061"/>
</kw>
<doc>Delete bridge br-s1 using OVS command and verify it gets applied in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:27:28.444650" elapsed="0.680513"/>
</kw>
<doc>Delete bridge with OVS command and verify it gets deleted from all instances.</doc>
<status status="PASS" start="2026-10-06T01:27:28.030187" elapsed="1.095082"/>
</test>
<test id="s1-s2-s1-t9" name="Create Bridge In Owner and Verify Before Fail" line="56">
<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-10-06T01:27:29.126768" elapsed="0.000203"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:29.126506" elapsed="0.000522"/>
</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-10-06T01:27:29.127947" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:29.127862" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.127844" elapsed="0.000166"/>
</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-10-06T01:27:29.129907" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:29.129824" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.129807" elapsed="0.000163"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.130884" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:29.130543" elapsed="0.000367"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.131342" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:29.131059" elapsed="0.000307"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:29.131407" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:27:29.131532" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:29.130171" elapsed="0.001384"/>
</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-10-06T01:27:29.134108" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:29.134024" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.134006" elapsed="0.000166"/>
</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-10-06T01:27:29.135324" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:29.135225" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.135208" elapsed="0.000179"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:29.135780" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:29.135530" elapsed="0.000275"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:29.136147" 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-10-06T01:27:29.135967" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:29.172003" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:29.136773" elapsed="0.035417"/>
</kw>
<msg time="2026-10-06T01:27:29.172372" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:29.172414" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.136344" elapsed="0.036104"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:29.248211" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:29.173061" elapsed="0.075359"/>
</kw>
<msg time="2026-10-06T01:27:29.248623" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:29.248665" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.172611" elapsed="0.076123"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.249022" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.248810" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.248790" elapsed="0.000329"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.249692" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:29.249335" elapsed="0.000441"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.250036" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.249839" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.249822" elapsed="0.000307"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:29.250160" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:29.252708" elapsed="0.000481"/>
</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-10-06T01:27:29.254455" elapsed="0.000491"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:29.256162" elapsed="0.000335"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:29.250984" elapsed="0.005579"/>
</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-10-06T01:27:29.250456" elapsed="0.006486"/>
</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="PASS" start="2026-10-06T01:27:29.134967" elapsed="0.122055"/>
</kw>
<msg time="2026-10-06T01:27:29.257107" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:29.257147" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.134335" elapsed="0.122846"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:29.257355" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:29.257252" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.257234" elapsed="0.000199"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:29.257770" elapsed="0.000024"/>
</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-10-06T01:27:29.258072" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:29.258136" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:29.133727" elapsed="0.124496"/>
</kw>
<msg time="2026-10-06T01:27:29.258322" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:29.258362" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.131890" elapsed="0.126507"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.258725" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.258467" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.258451" elapsed="0.000347"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:29.131752" elapsed="0.127068"/>
</iter>
<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-10-06T01:27:29.261390" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:29.261304" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.261286" elapsed="0.000166"/>
</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-10-06T01:27:29.262579" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:29.262496" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.262478" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:29.263033" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:29.262806" elapsed="0.000251"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:29.263416" 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-10-06T01:27:29.263217" elapsed="0.000223"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:29.295627" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:29.264027" elapsed="0.031807"/>
</kw>
<msg time="2026-10-06T01:27:29.295988" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:29.296030" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.263593" elapsed="0.032471"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:29.367657" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:29.296668" elapsed="0.071200"/>
</kw>
<msg time="2026-10-06T01:27:29.368028" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:29.368069" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.296227" elapsed="0.071877"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.368399" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.368177" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.368158" elapsed="0.000336"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.369036" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:29.368699" elapsed="0.000419"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.369396" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.369179" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.369163" elapsed="0.000326"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:29.369521" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:29.372035" elapsed="0.000501"/>
</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-10-06T01:27:29.373819" elapsed="0.000476"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:29.375490" elapsed="0.000542"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:29.370329" elapsed="0.005771"/>
</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-10-06T01:27:29.369818" elapsed="0.006400"/>
</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="PASS" start="2026-10-06T01:27:29.262189" elapsed="0.114123"/>
</kw>
<msg time="2026-10-06T01:27:29.376397" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:29.376437" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.261598" elapsed="0.114873"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:29.376631" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:29.376547" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.376530" elapsed="0.000198"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.377065" elapsed="0.000024"/>
</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-10-06T01:27:29.377423" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:29.377489" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:29.260994" elapsed="0.116581"/>
</kw>
<msg time="2026-10-06T01:27:29.377661" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:29.377794" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.259070" elapsed="0.118760"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.378117" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.377901" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.377884" elapsed="0.000304"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:29.258933" elapsed="0.119276"/>
</iter>
<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-10-06T01:27:29.380794" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:29.380707" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.380669" elapsed="0.000187"/>
</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-10-06T01:27:29.381965" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:29.381882" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.381865" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:29.382413" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:29.382169" elapsed="0.000269"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:29.382793" 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-10-06T01:27:29.382597" elapsed="0.000220"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:29.417023" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:29.383395" elapsed="0.033813"/>
</kw>
<msg time="2026-10-06T01:27:29.417381" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:29.417421" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.382969" elapsed="0.034487"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:29.493545" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:29.418062" elapsed="0.075684"/>
</kw>
<msg time="2026-10-06T01:27:29.493903" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:29.493944" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.417619" elapsed="0.076359"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.494255" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.494051" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.494031" elapsed="0.000332"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.494919" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:29.494543" elapsed="0.000458"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.495260" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.495064" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.495047" elapsed="0.000324"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:29.495401" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:29.498007" elapsed="0.000486"/>
</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-10-06T01:27:29.499794" elapsed="0.000455"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:29.501427" elapsed="0.000550"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:29.496309" elapsed="0.005736"/>
</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-10-06T01:27:29.495790" elapsed="0.006370"/>
</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="PASS" start="2026-10-06T01:27:29.381600" elapsed="0.120636"/>
</kw>
<msg time="2026-10-06T01:27:29.502332" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:29.502371" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.381003" elapsed="0.121402"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:29.502559" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:29.502474" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.502457" elapsed="0.000177"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.502967" elapsed="0.000024"/>
</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-10-06T01:27:29.503266" elapsed="0.000036"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:29.503348" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:29.380382" elapsed="0.123053"/>
</kw>
<msg time="2026-10-06T01:27:29.503520" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:29.503559" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.378474" elapsed="0.125119"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.503967" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.503662" elapsed="0.000507"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.503646" elapsed="0.000547"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:29.378336" elapsed="0.125879"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:29.131600" elapsed="0.372644"/>
</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-10-06T01:27:29.129514" elapsed="0.374797"/>
</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-10-06T01:27:29.127588" elapsed="0.376776"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.127174" elapsed="0.377233"/>
</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-10-06T01:27:29.126149" elapsed="0.378308"/>
</kw>
<kw name="Create Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:27:29.508610" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Create bridge br01 in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:27:29.507365" elapsed="0.001281">Variable '${original_owner}' not found.</status>
</kw>
<doc>Create Bridge in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:27:29.125602" elapsed="0.383201">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t10" name="Create Port In Owner and Verify Before Fail" line="60">
<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-10-06T01:27:29.510323" elapsed="0.000201"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:29.510059" elapsed="0.000515"/>
</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-10-06T01:27:29.511494" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:29.511407" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.511390" elapsed="0.000167"/>
</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-10-06T01:27:29.513507" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:29.513392" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.513376" elapsed="0.000197"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.514502" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:29.514151" elapsed="0.000377"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.514965" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:29.514692" elapsed="0.000298"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:29.515029" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:27:29.515156" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:29.513791" elapsed="0.001388"/>
</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-10-06T01:27:29.517775" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:29.517688" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.517656" elapsed="0.000183"/>
</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-10-06T01:27:29.518943" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:29.518859" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.518841" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:29.519391" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:29.519150" elapsed="0.000266"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:29.519774" 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-10-06T01:27:29.519577" elapsed="0.000221"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:29.553033" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:29.520375" elapsed="0.032834"/>
</kw>
<msg time="2026-10-06T01:27:29.553425" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:29.553467" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.519952" elapsed="0.033550"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:29.627950" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "a "n "[78Cd "[A[78C
 "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:29.554103" elapsed="0.074031"/>
</kw>
<msg time="2026-10-06T01:27:29.628307" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:29.628349" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.553665" elapsed="0.074719"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.628662" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.628456" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.628437" elapsed="0.000343"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.629320" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "a "n "[78Cd "[A[78C
 "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:29.628962" elapsed="0.000441"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.629661" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.629465" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.629448" elapsed="0.000323"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:29.629801" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:29.632303" elapsed="0.000498"/>
</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-10-06T01:27:29.634082" elapsed="0.000482"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:29.635999" elapsed="0.000384"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:29.630589" elapsed="0.005880"/>
</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-10-06T01:27:29.630081" elapsed="0.006519"/>
</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="PASS" start="2026-10-06T01:27:29.518577" elapsed="0.118127"/>
</kw>
<msg time="2026-10-06T01:27:29.636809" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:29.636850" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.517986" elapsed="0.118916"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:29.637090" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:29.636982" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.636965" elapsed="0.000204"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:29.637509" elapsed="0.000024"/>
</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-10-06T01:27:29.637909" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:29.637976" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:29.517384" elapsed="0.120677"/>
</kw>
<msg time="2026-10-06T01:27:29.638146" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:29.638186" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.515524" elapsed="0.122696"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.638524" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.638306" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.638289" elapsed="0.000306"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:29.515385" elapsed="0.123232"/>
</iter>
<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-10-06T01:27:29.641205" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:29.641120" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.641103" elapsed="0.000179"/>
</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-10-06T01:27:29.642395" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:29.642309" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.642290" elapsed="0.000168"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:29.642853" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:29.642599" elapsed="0.000279"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:29.643216" 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-10-06T01:27:29.643037" elapsed="0.000203"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:29.674472" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:29.643845" elapsed="0.030816"/>
</kw>
<msg time="2026-10-06T01:27:29.674836" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:29.674877" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.643418" elapsed="0.031493"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:29.742587" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "a "n "[78Cd "[A[78C
 "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:29.675506" elapsed="0.067323"/>
</kw>
<msg time="2026-10-06T01:27:29.742987" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:29.743029" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.675073" elapsed="0.067991"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.743367" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.743135" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.743117" elapsed="0.000344"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.743989" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "a "n "[78Cd "[A[78C
 "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:29.743639" elapsed="0.000432"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.744347" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.744132" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.744115" elapsed="0.000326"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:29.744471" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:29.746961" elapsed="0.000487"/>
</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-10-06T01:27:29.748646" elapsed="0.000472"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:29.750303" elapsed="0.000307"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:29.745260" elapsed="0.005437"/>
</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-10-06T01:27:29.744775" elapsed="0.006041"/>
</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="PASS" start="2026-10-06T01:27:29.642028" elapsed="0.108865"/>
</kw>
<msg time="2026-10-06T01:27:29.750974" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:29.751013" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.641441" elapsed="0.109607"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:29.751200" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:29.751117" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.751100" elapsed="0.000198"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.751610" elapsed="0.000024"/>
</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-10-06T01:27:29.752205" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:29.752290" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:29.640826" elapsed="0.111551"/>
</kw>
<msg time="2026-10-06T01:27:29.752462" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:29.752502" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.638892" elapsed="0.113645"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.752839" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.752605" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.752589" elapsed="0.000323"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:29.638750" elapsed="0.114183"/>
</iter>
<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-10-06T01:27:29.755456" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:29.755371" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.755354" elapsed="0.000164"/>
</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-10-06T01:27:29.756657" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:29.756574" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.756557" elapsed="0.000187"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:29.757110" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:29.756886" elapsed="0.000249"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:29.757483" 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-10-06T01:27:29.757306" elapsed="0.000200"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:29.784775" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:29.758080" elapsed="0.026891"/>
</kw>
<msg time="2026-10-06T01:27:29.785125" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:29.785167" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.757658" elapsed="0.027543"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:29.841478" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "a "n "[78Cd "[A[78C
 "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:29.785815" elapsed="0.055841"/>
</kw>
<msg time="2026-10-06T01:27:29.841834" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:29.841875" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.785379" elapsed="0.056530"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.842181" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.841979" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.841961" elapsed="0.000331"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.842840" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "a "n "[78Cd "[A[78C
 "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:29.842476" elapsed="0.000445"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.843180" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.842982" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.842965" elapsed="0.000321"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:29.843317" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:29.845815" elapsed="0.000489"/>
</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-10-06T01:27:29.847609" elapsed="0.000482"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:29.849479" elapsed="0.000330"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:29.844106" elapsed="0.005771"/>
</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-10-06T01:27:29.843584" elapsed="0.006410"/>
</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="PASS" start="2026-10-06T01:27:29.756308" elapsed="0.093763"/>
</kw>
<msg time="2026-10-06T01:27:29.850155" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:29.850194" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.755715" elapsed="0.094513"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:29.850399" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:29.850314" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.850296" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.850910" elapsed="0.000024"/>
</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-10-06T01:27:29.851213" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:29.851291" 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="PASS" start="2026-10-06T01:27:29.755060" elapsed="0.096318"/>
</kw>
<msg time="2026-10-06T01:27:29.851463" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:29.851503" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.753177" elapsed="0.098360"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:29.851841" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:29.851604" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.851589" elapsed="0.000324"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:29.753041" elapsed="0.098893"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:29.515229" elapsed="0.336732"/>
</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-10-06T01:27:29.513075" elapsed="0.338938"/>
</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-10-06T01:27:29.511137" elapsed="0.340930"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.510740" elapsed="0.341370"/>
</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-10-06T01:27:29.509707" elapsed="0.342451"/>
</kw>
<kw name="Create Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:27:29.856301" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Add Port vx2 to bridge br01 in controller ${controller_index} and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:27:29.855038" elapsed="0.001300">Variable '${original_owner}' not found.</status>
</kw>
<doc>Create Port in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:27:29.509144" elapsed="0.347327">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t11" name="Modify the destination IP of Port In Owner Before Fail" line="64">
<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-10-06T01:27:29.857934" elapsed="0.000199"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:29.857669" elapsed="0.000514"/>
</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-10-06T01:27:29.859083" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:29.858997" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.858980" elapsed="0.000167"/>
</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-10-06T01:27:29.861043" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:29.860960" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.860943" elapsed="0.000162"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.862020" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:29.861695" elapsed="0.000351"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:29.862481" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:29.862194" elapsed="0.000310"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:29.862545" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:27:29.862668" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:29.861325" elapsed="0.001383"/>
</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-10-06T01:27:29.865206" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:29.865123" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.865106" elapsed="0.000180"/>
</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-10-06T01:27:29.866419" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:29.866302" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:29.866284" elapsed="0.000202"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:29.866879" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:29.866630" elapsed="0.000274"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:29.867239" 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-10-06T01:27:29.867063" elapsed="0.000200"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:29.900460" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:29.867902" elapsed="0.032864"/>
</kw>
<msg time="2026-10-06T01:27:29.901001" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:29.901044" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.867471" elapsed="0.033610"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:30.000832" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:29.901942" elapsed="0.099092"/>
</kw>
<msg time="2026-10-06T01:27:30.001194" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:30.001235" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.901364" elapsed="0.099923"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:30.001638" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:30.001396" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.001366" elapsed="0.000397"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:30.002316" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:30.001951" elapsed="0.000454"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:30.002665" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:30.002467" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.002450" elapsed="0.000325"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:30.002812" elapsed="0.000039"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:30.005524" elapsed="0.000504"/>
</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-10-06T01:27:30.007259" elapsed="0.000595"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:30.009217" elapsed="0.000323"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:30.003725" elapsed="0.005881"/>
</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-10-06T01:27:30.003147" elapsed="0.006607"/>
</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="PASS" start="2026-10-06T01:27:29.866031" elapsed="0.143802"/>
</kw>
<msg time="2026-10-06T01:27:30.009920" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:30.009961" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.865435" elapsed="0.144561"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:30.010152" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:30.010066" elapsed="0.000326"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.010049" elapsed="0.000372"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:30.010817" elapsed="0.000024"/>
</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-10-06T01:27:30.011199" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:30.011277" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:29.864837" elapsed="0.146531"/>
</kw>
<msg time="2026-10-06T01:27:30.011456" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:30.011496" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.863037" elapsed="0.148494"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:30.011868" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:30.011603" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.011586" elapsed="0.000355"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:29.862897" elapsed="0.149067"/>
</iter>
<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-10-06T01:27:30.014700" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:30.014598" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.014581" elapsed="0.000183"/>
</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-10-06T01:27:30.015885" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:30.015801" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.015784" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:30.016339" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:30.016090" elapsed="0.000273"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:30.016732" 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-10-06T01:27:30.016522" elapsed="0.000235"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:30.048560" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:30.017329" elapsed="0.031450"/>
</kw>
<msg time="2026-10-06T01:27:30.048940" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:30.048981" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:30.016907" elapsed="0.032109"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:30.142956" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:30.049616" elapsed="0.093585"/>
</kw>
<msg time="2026-10-06T01:27:30.143409" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:30.143452" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:30.049180" elapsed="0.094308"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:30.143890" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:30.143588" elapsed="0.000377"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.143558" elapsed="0.000434"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:30.144592" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:30.144178" elapsed="0.000517"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:30.144957" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:30.144760" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.144742" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:30.145144" elapsed="0.000037"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:30.147827" elapsed="0.000502"/>
</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-10-06T01:27:30.149582" elapsed="0.000500"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:30.151311" elapsed="0.000318"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:30.146032" elapsed="0.005920"/>
</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-10-06T01:27:30.145478" elapsed="0.006596"/>
</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="PASS" start="2026-10-06T01:27:30.015517" elapsed="0.136638"/>
</kw>
<msg time="2026-10-06T01:27:30.152242" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:30.152339" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:30.014913" elapsed="0.137463"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:30.152534" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:30.152448" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.152431" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:30.152965" elapsed="0.000024"/>
</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-10-06T01:27:30.153284" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:30.153349" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:30.014296" elapsed="0.139141"/>
</kw>
<msg time="2026-10-06T01:27:30.153524" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:30.153565" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:30.012231" elapsed="0.141369"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:30.153942" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:30.153669" elapsed="0.000323"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.153653" elapsed="0.000361"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:30.012091" elapsed="0.141944"/>
</iter>
<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-10-06T01:27:30.158126" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:30.158039" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.158021" elapsed="0.000168"/>
</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-10-06T01:27:30.159310" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:30.159208" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.159192" elapsed="0.000182"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:30.159769" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:30.159517" elapsed="0.000277"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:30.160134" 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-10-06T01:27:30.159955" elapsed="0.000203"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:30.194284" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:30.160759" elapsed="0.033697"/>
</kw>
<msg time="2026-10-06T01:27:30.194638" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:30.194700" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:30.160328" elapsed="0.034409"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:30.286858" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:30.195338" elapsed="0.091702"/>
</kw>
<msg time="2026-10-06T01:27:30.287197" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:30.287238" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:30.194901" elapsed="0.092469"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:30.287651" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:30.287445" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.287426" elapsed="0.000346"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:30.288303" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:30.287954" elapsed="0.000434"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:30.288656" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:30.288451" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.288434" elapsed="0.000332"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:30.288797" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:30.291251" elapsed="0.000519"/>
</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-10-06T01:27:30.292982" elapsed="0.000510"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:30.294653" elapsed="0.000329"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:30.289583" elapsed="0.005466"/>
</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-10-06T01:27:30.289076" elapsed="0.006090"/>
</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="PASS" start="2026-10-06T01:27:30.158951" elapsed="0.136291"/>
</kw>
<msg time="2026-10-06T01:27:30.295345" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:30.295384" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:30.158356" elapsed="0.137063"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:30.295572" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:30.295487" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.295471" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:30.296282" elapsed="0.000025"/>
</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-10-06T01:27:30.296585" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:30.296665" elapsed="0.000034"/>
</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="PASS" start="2026-10-06T01:27:30.157737" elapsed="0.139035"/>
</kw>
<msg time="2026-10-06T01:27:30.296856" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:30.296895" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:30.154308" elapsed="0.142622"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:30.297217" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:30.296999" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.296983" elapsed="0.000323"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:30.154156" elapsed="0.143211"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:29.862756" elapsed="0.434643"/>
</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-10-06T01:27:29.860648" elapsed="0.436805"/>
</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-10-06T01:27:29.858743" elapsed="0.438762"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:29.858340" elapsed="0.439205"/>
</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-10-06T01:27:29.857332" elapsed="0.440261"/>
</kw>
<kw name="Modify the destination IP of Sample Port" owner="ClusterOvsdb">
<msg time="2026-10-06T01:27:30.300543" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Modify the dst ip of port vx2 in bridge br01 in controller ${controller_index}.</doc>
<status status="FAIL" start="2026-10-06T01:27:30.299292" elapsed="0.001287">Variable '${original_owner}' not found.</status>
</kw>
<doc>Modify the dst ip of existing port in Owner.</doc>
<status status="FAIL" start="2026-10-06T01:27:29.856802" elapsed="0.443933">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t12" name="Verify Port Is Modified Before Fail" line="68">
<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-10-06T01:27:30.302248" elapsed="0.000253"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:30.302004" elapsed="0.000547"/>
</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-10-06T01:27:30.303456" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:30.303370" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.303353" elapsed="0.000166"/>
</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-10-06T01:27:30.305400" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:30.305317" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.305300" elapsed="0.000163"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:30.306366" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:30.306031" elapsed="0.000361"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:30.306830" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:30.306541" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:30.306895" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:27:30.307019" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:30.305662" elapsed="0.001379"/>
</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-10-06T01:27:30.309563" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:30.309479" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.309462" elapsed="0.000164"/>
</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-10-06T01:27:30.310742" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:30.310634" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.310617" elapsed="0.000192"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:30.311190" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:30.310951" elapsed="0.000264"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:30.311608" 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-10-06T01:27:30.311429" elapsed="0.000202"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:30.345278" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:30.312215" elapsed="0.033257"/>
</kw>
<msg time="2026-10-06T01:27:30.345629" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:30.345669" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:30.311803" elapsed="0.033927"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:30.414655" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CB
 "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:30.346362" elapsed="0.068537"/>
</kw>
<msg time="2026-10-06T01:27:30.415061" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:30.415102" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:30.345895" elapsed="0.069242"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:30.415447" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:30.415212" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.415192" elapsed="0.000352"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:30.416092" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CB
 "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:30.415744" elapsed="0.000427"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:30.416447" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:30.416233" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.416216" elapsed="0.000325"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:30.416572" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:30.419098" elapsed="0.000501"/>
</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-10-06T01:27:30.420876" elapsed="0.000471"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:30.422551" elapsed="0.000539"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:30.417391" elapsed="0.005767"/>
</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-10-06T01:27:30.416878" elapsed="0.006421"/>
</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="PASS" start="2026-10-06T01:27:30.310377" elapsed="0.113008"/>
</kw>
<msg time="2026-10-06T01:27:30.423469" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:30.423509" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:30.309787" elapsed="0.113757"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:30.423716" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:30.423614" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.423597" elapsed="0.000198"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:30.424109" elapsed="0.000024"/>
</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-10-06T01:27:30.424426" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:30.424493" elapsed="0.000022"/>
</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="PASS" start="2026-10-06T01:27:30.309174" elapsed="0.115411"/>
</kw>
<msg time="2026-10-06T01:27:30.424670" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:30.424803" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:30.307391" elapsed="0.117448"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:30.425126" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:30.424909" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.424893" elapsed="0.000305"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:30.307233" elapsed="0.117986"/>
</iter>
<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-10-06T01:27:30.427784" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:30.427698" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.427662" elapsed="0.000184"/>
</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-10-06T01:27:30.428985" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:30.428901" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.428884" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:30.429429" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:30.429189" elapsed="0.000264"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:30.429811" 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-10-06T01:27:30.429613" elapsed="0.000222"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:30.470395" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:30.430419" elapsed="0.040152"/>
</kw>
<msg time="2026-10-06T01:27:30.470749" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:30.470791" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:30.429988" elapsed="0.040839"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:30.532807" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CB
 "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:30.471431" elapsed="0.061563"/>
</kw>
<msg time="2026-10-06T01:27:30.533161" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:30.533205" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:30.470991" elapsed="0.062261"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:30.533562" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:30.533348" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.533328" elapsed="0.000330"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:30.534211" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CB
 "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:30.533865" elapsed="0.000443"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:30.534572" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:30.534372" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.534354" elapsed="0.000312"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:30.534715" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:30.537214" elapsed="0.000519"/>
</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-10-06T01:27:30.538977" elapsed="0.000483"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:30.540664" elapsed="0.000342"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:30.535504" elapsed="0.005570"/>
</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-10-06T01:27:30.534988" elapsed="0.006206"/>
</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="PASS" start="2026-10-06T01:27:30.428622" elapsed="0.112666"/>
</kw>
<msg time="2026-10-06T01:27:30.541374" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:30.541414" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:30.428027" elapsed="0.113422"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:30.541605" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:30.541518" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.541501" elapsed="0.000468"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:30.542309" elapsed="0.000065"/>
</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-10-06T01:27:30.542656" elapsed="0.000040"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:30.542741" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:30.427388" elapsed="0.115444"/>
</kw>
<msg time="2026-10-06T01:27:30.542932" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:30.542973" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:30.425486" elapsed="0.117522"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:30.543317" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:30.543080" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.543063" elapsed="0.000328"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:30.425348" elapsed="0.118064"/>
</iter>
<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-10-06T01:27:30.545974" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:30.545888" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.545871" elapsed="0.000166"/>
</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-10-06T01:27:30.547154" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:30.547069" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.547053" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:30.547603" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:30.547376" elapsed="0.000252"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:30.547988" 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-10-06T01:27:30.547807" elapsed="0.000205"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:30.580445" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:30.548602" elapsed="0.032014"/>
</kw>
<msg time="2026-10-06T01:27:30.580812" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:30.580854" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:30.548166" elapsed="0.032722"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:30.645133" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CB
 "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:30.581487" elapsed="0.063839"/>
</kw>
<msg time="2026-10-06T01:27:30.645485" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:30.645527" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:30.581051" elapsed="0.064511"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:30.645861" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:30.645631" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.645613" elapsed="0.000342"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:30.646491" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CB
 "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:30.646135" elapsed="0.000434"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:30.646843" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:30.646630" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.646613" elapsed="0.000355"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:30.646999" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:30.649478" elapsed="0.000497"/>
</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-10-06T01:27:30.651200" elapsed="0.000499"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:30.653085" elapsed="0.000341"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:30.647807" elapsed="0.005686"/>
</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-10-06T01:27:30.647283" elapsed="0.006327"/>
</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="PASS" start="2026-10-06T01:27:30.546810" elapsed="0.106892"/>
</kw>
<msg time="2026-10-06T01:27:30.653792" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:30.653831" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:30.546185" elapsed="0.107681"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:30.654019" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:30.653935" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.653918" elapsed="0.000177"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:30.654423" elapsed="0.000024"/>
</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-10-06T01:27:30.654812" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:30.654877" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:30.545579" elapsed="0.109385"/>
</kw>
<msg time="2026-10-06T01:27:30.655048" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:30.655088" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:30.543662" elapsed="0.111461"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:30.655436" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:30.655191" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:30.655176" elapsed="0.000331"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:30.543524" elapsed="0.112004"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:30.307091" elapsed="0.348465"/>
</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-10-06T01:27:30.305008" elapsed="0.350603"/>
</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-10-06T01:27:30.303098" elapsed="0.352564"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:30.302713" elapsed="0.353010"/>
</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-10-06T01:27:30.301647" elapsed="0.354130"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:27:30.658150" level="INFO">${port_dictionary} = {'br01': '6', 'vx2': '3', '10.0.0.19': '1'}</msg>
<var>${port_dictionary}</var>
<arg>br01=6</arg>
<arg>vx2=3</arg>
<arg>10.0.0.19=1</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:27:30.657782" elapsed="0.000393"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:27:30.662733" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:27:30.661430" elapsed="0.001344">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:27:31.672734" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:27:31.669558" elapsed="0.003273">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:27:32.682710" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:27:32.679652" elapsed="0.003153">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:27:33.692585" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:27:33.689455" elapsed="0.003265">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:27:34.702434" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:27:34.699462" elapsed="0.003066">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:27:35.712597" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:27:35.709587" elapsed="0.003167">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<msg time="2026-10-06T01:27:35.712970" level="FAIL">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</msg>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-10-06T01:27:30.658394" elapsed="5.054877">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:27:30.657397" elapsed="5.056133">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify port is modified in all instances.</doc>
<status status="FAIL" start="2026-10-06T01:27:30.301152" elapsed="5.412697">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s2-s1-t13" name="Delete Port In Owner Before Fail" line="72">
<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-10-06T01:27:35.717336" elapsed="0.000540"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:35.716748" elapsed="0.001243"/>
</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-10-06T01:27:35.720142" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:35.719923" elapsed="0.000342"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:35.719881" elapsed="0.000435"/>
</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-10-06T01:27:35.724616" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:35.724422" elapsed="0.000363"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:35.724384" elapsed="0.000451"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:35.726997" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:35.726194" elapsed="0.000863"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:35.728072" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:35.727421" elapsed="0.000706"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:35.728239" elapsed="0.000064"/>
</return>
<msg time="2026-10-06T01:27:35.728530" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:35.725357" elapsed="0.003226"/>
</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-10-06T01:27:35.734532" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:35.734342" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:35.734302" elapsed="0.000403"/>
</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-10-06T01:27:35.737387" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:35.737173" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:35.737135" elapsed="0.000393"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:35.738436" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:35.737895" elapsed="0.000597"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:35.739330" 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-10-06T01:27:35.738896" elapsed="0.000489"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:35.773473" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:35.740774" elapsed="0.032975"/>
</kw>
<msg time="2026-10-06T01:27:35.773976" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:35.774033" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:35.739780" elapsed="0.034302"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:35.838563" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "[78Cf "[A[78Co
 "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:35.774962" elapsed="0.063824"/>
</kw>
<msg time="2026-10-06T01:27:35.838967" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:35.839008" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:35.774339" elapsed="0.064704"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:35.839343" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:35.839114" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:35.839096" elapsed="0.000343"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:35.839982" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "[78Cf "[A[78Co
 "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:35.839621" elapsed="0.000440"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:35.840332" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:35.840122" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:35.840105" elapsed="0.000322"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:35.840457" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:35.843080" elapsed="0.000494"/>
</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-10-06T01:27:35.844815" elapsed="0.000487"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:35.846479" elapsed="0.000337"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:35.841300" elapsed="0.005585"/>
</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-10-06T01:27:35.840780" elapsed="0.006219"/>
</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="PASS" start="2026-10-06T01:27:35.736544" elapsed="0.110531"/>
</kw>
<msg time="2026-10-06T01:27:35.847157" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:35.847197" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:35.735131" elapsed="0.112114"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:35.847399" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:35.847315" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:35.847298" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:35.848161" elapsed="0.000091"/>
</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-10-06T01:27:35.848533" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:35.848599" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:35.733643" elapsed="0.115058"/>
</kw>
<msg time="2026-10-06T01:27:35.848787" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:35.848827" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:35.729554" elapsed="0.119307"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:35.849150" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:35.848929" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:35.848913" elapsed="0.000320"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:35.729212" elapsed="0.120044"/>
</iter>
<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-10-06T01:27:35.851785" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:35.851700" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:35.851668" elapsed="0.000181"/>
</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-10-06T01:27:35.852947" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:35.852863" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:35.852846" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:35.853390" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:35.853151" elapsed="0.000264"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:35.853772" 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-10-06T01:27:35.853576" elapsed="0.000220"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:35.885744" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:35.854379" elapsed="0.031538"/>
</kw>
<msg time="2026-10-06T01:27:35.886096" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:35.886138" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:35.853951" elapsed="0.032221"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:35.947007" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "[78Cf "[A[78Co
 "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:35.886790" elapsed="0.060392"/>
</kw>
<msg time="2026-10-06T01:27:35.947354" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:35.947395" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:35.886348" elapsed="0.061081"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:35.947726" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:35.947500" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:35.947481" elapsed="0.000343"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:35.948497" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "[78Cf "[A[78Co
 "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:35.948013" elapsed="0.000574"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:35.948869" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:35.948651" elapsed="0.000323"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:35.948634" elapsed="0.000366"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:35.949031" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:35.951515" elapsed="0.000501"/>
</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-10-06T01:27:35.953297" elapsed="0.000482"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:35.955195" elapsed="0.000321"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:35.949837" elapsed="0.005746"/>
</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-10-06T01:27:35.949315" elapsed="0.006402"/>
</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="PASS" start="2026-10-06T01:27:35.852582" elapsed="0.103214"/>
</kw>
<msg time="2026-10-06T01:27:35.955880" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:35.955919" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:35.851995" elapsed="0.103960"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:35.956110" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:35.956024" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:35.956007" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:35.956527" elapsed="0.000030"/>
</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-10-06T01:27:35.956887" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:35.956954" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:35.851393" elapsed="0.105646"/>
</kw>
<msg time="2026-10-06T01:27:35.957123" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:35.957163" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:35.849505" elapsed="0.107693"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:35.957502" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:35.957285" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:35.957269" elapsed="0.000304"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:35.849366" elapsed="0.108228"/>
</iter>
<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-10-06T01:27:35.960255" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:35.960153" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:35.960136" elapsed="0.000183"/>
</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-10-06T01:27:35.961432" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:35.961349" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:35.961332" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:35.961883" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:35.961636" elapsed="0.000271"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:35.962257" 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-10-06T01:27:35.962066" elapsed="0.000215"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:35.994672" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:35.962863" elapsed="0.032006"/>
</kw>
<msg time="2026-10-06T01:27:35.995029" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:35.995071" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:35.962434" elapsed="0.032672"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:36.057771" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "[78Cf "[A[78Co
 "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:35.995766" elapsed="0.062200"/>
</kw>
<msg time="2026-10-06T01:27:36.058127" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:36.058169" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:35.995325" elapsed="0.062878"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.058494" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.058289" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.058270" elapsed="0.000317"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:36.059131" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "[78Cf "[A[78Co
 "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:36.058789" elapsed="0.000421"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.059503" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.059306" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.059289" elapsed="0.000307"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:36.059626" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:36.062117" elapsed="0.000490"/>
</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-10-06T01:27:36.063846" elapsed="0.000474"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:36.065519" elapsed="0.000332"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:36.060418" elapsed="0.005498"/>
</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-10-06T01:27:36.059914" elapsed="0.006121"/>
</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="PASS" start="2026-10-06T01:27:35.961075" elapsed="0.105036"/>
</kw>
<msg time="2026-10-06T01:27:36.066194" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:36.066248" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:35.960468" elapsed="0.105841"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:36.066465" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:36.066381" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.066363" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.067146" elapsed="0.000024"/>
</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-10-06T01:27:36.067468" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:36.067534" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:35.959812" elapsed="0.107808"/>
</kw>
<msg time="2026-10-06T01:27:36.067725" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:36.067767" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:35.957944" elapsed="0.109857"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.068094" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.067870" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.067854" elapsed="0.000312"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:35.957802" elapsed="0.110433"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:35.728720" elapsed="0.339546"/>
</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-10-06T01:27:35.723709" elapsed="0.344611"/>
</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-10-06T01:27:35.719303" elapsed="0.349069"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:35.718348" elapsed="0.350066"/>
</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-10-06T01:27:35.715887" elapsed="0.352577"/>
</kw>
<kw name="Delete Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:27:36.072517" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Delete port vx2 from bridge br01 in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:27:36.071271" elapsed="0.001280">Variable '${original_owner}' not found.</status>
</kw>
<doc>Delete port in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:27:35.714660" elapsed="0.358039">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t14" name="Delete Bridge In Owner And Verify Before Fail" line="76">
<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-10-06T01:27:36.074189" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:36.073947" elapsed="0.000500"/>
</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-10-06T01:27:36.075350" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:36.075262" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.075244" elapsed="0.000170"/>
</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-10-06T01:27:36.077300" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:36.077203" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.077187" elapsed="0.000176"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:36.078289" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:36.077941" elapsed="0.000374"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:36.078753" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:36.078466" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:36.078818" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:27:36.078943" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:36.077564" elapsed="0.001401"/>
</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-10-06T01:27:36.081480" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:36.081396" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.081379" elapsed="0.000163"/>
</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-10-06T01:27:36.082633" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:36.082550" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.082534" elapsed="0.000186"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:36.083089" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:36.082862" elapsed="0.000260"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:36.083512" 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-10-06T01:27:36.083332" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:36.118086" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:36.084125" elapsed="0.034163"/>
</kw>
<msg time="2026-10-06T01:27:36.118447" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:36.118489" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.083706" elapsed="0.034818"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:36.196244" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78CA "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:36.119130" elapsed="0.077340"/>
</kw>
<msg time="2026-10-06T01:27:36.196651" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:36.196714" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.118709" elapsed="0.078041"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.197035" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.196824" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.196805" elapsed="0.000324"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:36.197701" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78CA "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:36.197341" elapsed="0.000444"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.198043" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.197846" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.197830" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:36.198167" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:36.200707" elapsed="0.000478"/>
</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-10-06T01:27:36.202439" elapsed="0.000485"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:36.204286" elapsed="0.000322"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:36.198974" elapsed="0.005718"/>
</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-10-06T01:27:36.198457" elapsed="0.006353"/>
</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="PASS" start="2026-10-06T01:27:36.082294" elapsed="0.122593"/>
</kw>
<msg time="2026-10-06T01:27:36.204969" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:36.205008" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.081702" elapsed="0.123341"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:36.205197" elapsed="0.000141"/>
</return>
<status status="PASS" start="2026-10-06T01:27:36.205112" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.205095" elapsed="0.000307"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:36.205815" elapsed="0.000024"/>
</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-10-06T01:27:36.206117" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:36.206181" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:36.081094" elapsed="0.125186"/>
</kw>
<msg time="2026-10-06T01:27:36.206374" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:36.206415" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.079307" elapsed="0.127144"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.206755" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.206520" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.206504" elapsed="0.000324"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:36.079154" elapsed="0.127696"/>
</iter>
<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-10-06T01:27:36.210528" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:36.210442" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.210424" elapsed="0.000197"/>
</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-10-06T01:27:36.211743" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:36.211635" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.211618" elapsed="0.000188"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:36.212170" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:36.211947" elapsed="0.000247"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:36.212563" 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-10-06T01:27:36.212369" elapsed="0.000219"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:36.244739" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:36.213197" elapsed="0.031734"/>
</kw>
<msg time="2026-10-06T01:27:36.245088" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:36.245129" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.212768" elapsed="0.032396"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:36.315422" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78CA "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:36.245776" elapsed="0.069829"/>
</kw>
<msg time="2026-10-06T01:27:36.315798" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:36.315838" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.245342" elapsed="0.070531"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.316151" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.315945" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.315927" elapsed="0.000335"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:36.316828" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78CA "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:36.316441" elapsed="0.000476"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.317177" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.316979" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.316962" elapsed="0.000326"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:36.317319" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:36.319823" elapsed="0.000564"/>
</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-10-06T01:27:36.321606" elapsed="0.000478"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:36.323268" elapsed="0.000307"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:36.318118" elapsed="0.005523"/>
</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-10-06T01:27:36.317595" elapsed="0.006188"/>
</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="PASS" start="2026-10-06T01:27:36.211380" elapsed="0.112479"/>
</kw>
<msg time="2026-10-06T01:27:36.323943" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:36.323983" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.210789" elapsed="0.113229"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:36.324172" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:36.324087" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.324070" elapsed="0.000238"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.324634" elapsed="0.000023"/>
</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-10-06T01:27:36.325277" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:36.325344" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:36.210129" elapsed="0.115302"/>
</kw>
<msg time="2026-10-06T01:27:36.325516" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:36.325556" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.207097" elapsed="0.118494"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.325896" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.325658" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.325642" elapsed="0.000325"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:36.206961" elapsed="0.119027"/>
</iter>
<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-10-06T01:27:36.328521" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:36.328436" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.328419" elapsed="0.000164"/>
</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-10-06T01:27:36.329767" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:36.329662" elapsed="0.000147"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.329645" elapsed="0.000184"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:36.330196" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:36.329971" elapsed="0.000265"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:36.330574" 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-10-06T01:27:36.330396" elapsed="0.000202"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:36.363248" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:36.331179" elapsed="0.032242"/>
</kw>
<msg time="2026-10-06T01:27:36.363577" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:36.363618" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.330767" elapsed="0.032886"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:36.436076" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78CA "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:36.364270" elapsed="0.072010"/>
</kw>
<msg time="2026-10-06T01:27:36.436445" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:36.436497" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.363837" elapsed="0.072702"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.436849" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.436613" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.436594" elapsed="0.000353"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:36.437491" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78CA "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:36.437127" elapsed="0.000447"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.437890" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.437637" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.437620" elapsed="0.000366"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:36.438018" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:36.440507" elapsed="0.000498"/>
</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-10-06T01:27:36.442267" elapsed="0.000481"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:36.443958" elapsed="0.000325"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:36.438830" elapsed="0.005520"/>
</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-10-06T01:27:36.438303" elapsed="0.006166"/>
</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="PASS" start="2026-10-06T01:27:36.329338" elapsed="0.115208"/>
</kw>
<msg time="2026-10-06T01:27:36.444628" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:36.444668" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.328747" elapsed="0.116150"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:36.445054" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:27:36.444968" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.444951" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.445462" elapsed="0.000023"/>
</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-10-06T01:27:36.445782" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:36.445846" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:36.328126" elapsed="0.117805"/>
</kw>
<msg time="2026-10-06T01:27:36.446015" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:36.446055" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.326251" elapsed="0.119838"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.446409" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.446157" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.446141" elapsed="0.000340"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:36.326101" elapsed="0.120401"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:36.079015" elapsed="0.367514"/>
</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-10-06T01:27:36.076912" elapsed="0.369671"/>
</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-10-06T01:27:36.074992" elapsed="0.371642"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.074590" elapsed="0.372207"/>
</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-10-06T01:27:36.073592" elapsed="0.373258"/>
</kw>
<kw name="Delete Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:27:36.450861" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Delete bridge br01 in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:27:36.449613" elapsed="0.001282">Variable '${original_owner}' not found.</status>
</kw>
<doc>Delete bridge in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:27:36.073041" elapsed="0.377987">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t15" name="Kill Owner Instance" line="80">
<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-10-06T01:27:36.452483" elapsed="0.000214"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:36.452236" elapsed="0.000512"/>
</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-10-06T01:27:36.453751" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:36.453647" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.453630" elapsed="0.000183"/>
</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-10-06T01:27:36.455690" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:36.455592" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.455575" elapsed="0.000178"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:36.456646" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:36.456320" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:36.457105" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:36.456837" elapsed="0.000292"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:36.457170" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:27:36.457325" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:36.455955" elapsed="0.001393"/>
</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-10-06T01:27:36.459857" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:36.459772" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.459755" elapsed="0.000165"/>
</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-10-06T01:27:36.461013" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:36.460930" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.460914" elapsed="0.000161"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:36.461458" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:36.461233" elapsed="0.000249"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:36.461832" 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-10-06T01:27:36.461641" elapsed="0.000215"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:36.505358" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:36.462429" elapsed="0.043106"/>
</kw>
<msg time="2026-10-06T01:27:36.505718" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:36.505761" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.462007" elapsed="0.043789"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:36.562160" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "K "i "l "l "[C "O "w "n "e "r "[C "I "n "s "t "a "n "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:36.506399" elapsed="0.055946"/>
</kw>
<msg time="2026-10-06T01:27:36.562502" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:36.562544" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.505964" elapsed="0.056614"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.562877" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.562648" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.562629" elapsed="0.000348"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:36.563506" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "K "i "l "l "[C "O "w "n "e "r "[C "I "n "s "t "a "n "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:36.563157" elapsed="0.000423"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.563856" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.563641" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.563625" elapsed="0.000325"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:36.564010" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:36.566486" elapsed="0.000494"/>
</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-10-06T01:27:36.568202" elapsed="0.000465"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:36.570065" elapsed="0.000319"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:36.564808" elapsed="0.005648"/>
</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-10-06T01:27:36.564293" elapsed="0.006279"/>
</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="PASS" start="2026-10-06T01:27:36.460652" elapsed="0.109997"/>
</kw>
<msg time="2026-10-06T01:27:36.570750" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:36.570790" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.460065" elapsed="0.110760"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:36.570979" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:36.570895" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.570877" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:36.571382" elapsed="0.000023"/>
</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-10-06T01:27:36.571770" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:36.571837" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:36.459468" elapsed="0.112455"/>
</kw>
<msg time="2026-10-06T01:27:36.572007" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:36.572047" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.457675" elapsed="0.114408"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.572381" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.572151" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.572134" elapsed="0.000319"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:36.457537" elapsed="0.114937"/>
</iter>
<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-10-06T01:27:36.575002" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:36.574918" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.574900" elapsed="0.000165"/>
</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-10-06T01:27:36.576163" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:36.576080" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.576064" elapsed="0.000176"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:36.576608" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:36.576383" elapsed="0.000249"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:36.576983" 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-10-06T01:27:36.576809" elapsed="0.000198"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:36.608167" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:36.577585" elapsed="0.030786"/>
</kw>
<msg time="2026-10-06T01:27:36.608529" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:36.608571" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.577159" elapsed="0.031446"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:36.659304" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "K "i "l "l "[C "O "w "n "e "r "[C "I "n "s "t "a "n "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:36.609228" elapsed="0.050249"/>
</kw>
<msg time="2026-10-06T01:27:36.659635" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:36.659698" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.608794" elapsed="0.050942"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.660014" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.659807" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.659789" elapsed="0.000320"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:36.660638" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "K "i "l "l "[C "O "w "n "e "r "[C "I "n "s "t "a "n "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:36.660302" elapsed="0.000427"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.660993" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.660792" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.660775" elapsed="0.000311"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:36.661116" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:36.663591" elapsed="0.000496"/>
</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-10-06T01:27:36.665332" elapsed="0.000471"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:36.667066" elapsed="0.000326"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:36.661912" elapsed="0.005547"/>
</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-10-06T01:27:36.661399" elapsed="0.006177"/>
</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="PASS" start="2026-10-06T01:27:36.575825" elapsed="0.091827"/>
</kw>
<msg time="2026-10-06T01:27:36.668007" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:36.668048" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.575224" elapsed="0.092858"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:36.668254" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:36.668153" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.668136" elapsed="0.000195"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.668646" elapsed="0.000024"/>
</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-10-06T01:27:36.668970" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:36.669035" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:36.574605" elapsed="0.094516"/>
</kw>
<msg time="2026-10-06T01:27:36.669204" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:36.669258" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.572734" elapsed="0.096560"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.669580" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.669362" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.669346" elapsed="0.000305"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:36.572582" elapsed="0.097155"/>
</iter>
<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-10-06T01:27:36.672326" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:36.672240" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.672222" elapsed="0.000167"/>
</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-10-06T01:27:36.673488" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:36.673403" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.673386" elapsed="0.000184"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:36.673964" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:36.673737" elapsed="0.000252"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:36.674343" 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-10-06T01:27:36.674148" elapsed="0.000219"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:36.705548" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:36.674951" elapsed="0.030792"/>
</kw>
<msg time="2026-10-06T01:27:36.705920" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:36.705961" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.674521" elapsed="0.031476"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:36.764401" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "K "i "l "l "[C "O "w "n "e "r "[C "I "n "s "t "a "n "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:36.706594" elapsed="0.057989"/>
</kw>
<msg time="2026-10-06T01:27:36.764764" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:36.764806" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.706161" elapsed="0.058680"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.765121" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.764915" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.764894" elapsed="0.000337"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:36.765768" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "K "i "l "l "[C "O "w "n "e "r "[C "I "n "s "t "a "n "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:36.765415" elapsed="0.000425"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.766097" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.765901" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.765885" elapsed="0.000304"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:36.766237" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:36.768747" elapsed="0.000489"/>
</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-10-06T01:27:36.770456" elapsed="0.000473"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:36.772182" elapsed="0.000323"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:36.767014" elapsed="0.005558"/>
</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-10-06T01:27:36.766502" elapsed="0.006233"/>
</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="PASS" start="2026-10-06T01:27:36.673127" elapsed="0.099687"/>
</kw>
<msg time="2026-10-06T01:27:36.772896" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:36.772935" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.672535" elapsed="0.100435"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:36.773123" elapsed="0.000023"/>
</return>
<status status="PASS" start="2026-10-06T01:27:36.773039" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.773022" elapsed="0.000230"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.773569" elapsed="0.000023"/>
</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-10-06T01:27:36.774132" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:36.774198" 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="PASS" start="2026-10-06T01:27:36.671895" elapsed="0.102403"/>
</kw>
<msg time="2026-10-06T01:27:36.774381" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:36.774421" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.669995" elapsed="0.104460"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.774766" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.774524" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.774508" elapsed="0.000331"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:36.669852" elapsed="0.105008"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:36.457397" elapsed="0.317489"/>
</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-10-06T01:27:36.455298" elapsed="0.319645"/>
</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-10-06T01:27:36.453392" elapsed="0.321602"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.452945" elapsed="0.322093"/>
</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-10-06T01:27:36.451864" elapsed="0.323224"/>
</kw>
<kw name="Kill_Single_Member" owner="ClusterManagement">
<msg time="2026-10-06T01:27:36.776751" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Convenience keyword that kills the specified member of the cluster.
The KW will return a list of available members: ${updated index_list}=${original_index_list}-${member}</doc>
<status status="FAIL" start="2026-10-06T01:27:36.775326" elapsed="0.001460">Variable '${original_owner}' not found.</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_cluster_list}</arg>
<arg>${original_candidate_list}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.776980" elapsed="0.000020"/>
</kw>
<doc>Kill Owner Instance and verify it is dead</doc>
<status status="FAIL" start="2026-10-06T01:27:36.451405" elapsed="0.325719">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t16" name="Check Shards Status After Fail" line="85">
<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-10-06T01:27:36.778640" elapsed="0.000215"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:36.778398" elapsed="0.000508"/>
</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-10-06T01:27:36.779797" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:36.779712" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.779693" elapsed="0.000166"/>
</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-10-06T01:27:36.781751" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:36.781647" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.781630" elapsed="0.000183"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:36.782719" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:36.782382" elapsed="0.000364"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:36.783163" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:36.782896" elapsed="0.000291"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:36.783240" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:27:36.783366" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:36.782014" elapsed="0.001374"/>
</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-10-06T01:27:36.785904" elapsed="0.000043"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:36.785821" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.785803" elapsed="0.000198"/>
</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-10-06T01:27:36.787113" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:36.787030" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.787013" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:36.787595" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:36.787372" elapsed="0.000248"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:36.787971" 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-10-06T01:27:36.787795" elapsed="0.000200"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:36.823408" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:36.788568" elapsed="0.035064"/>
</kw>
<msg time="2026-10-06T01:27:36.823820" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:36.823863" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.788147" elapsed="0.035751"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:36.886304" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "A "f "t "[78Ce "[A[78Cr
 "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:36.824529" elapsed="0.061953"/>
</kw>
<msg time="2026-10-06T01:27:36.886639" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:36.886703" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.824075" elapsed="0.062664"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.887025" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.886810" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.886792" elapsed="0.000328"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:36.887649" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "A "f "t "[78Ce "[A[78Cr
 "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:36.887313" elapsed="0.000429"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.888006" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.887805" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.887788" elapsed="0.000310"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:36.888128" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:36.890613" elapsed="0.000499"/>
</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-10-06T01:27:36.892357" elapsed="0.000480"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:36.894224" elapsed="0.000310"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:36.888923" elapsed="0.005676"/>
</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-10-06T01:27:36.888410" elapsed="0.006320"/>
</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="PASS" start="2026-10-06T01:27:36.786766" elapsed="0.108041"/>
</kw>
<msg time="2026-10-06T01:27:36.894889" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:36.894928" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.786149" elapsed="0.108814"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:36.895116" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:36.895032" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.895015" elapsed="0.000232"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:36.895564" elapsed="0.000023"/>
</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-10-06T01:27:36.895953" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:36.896018" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:36.785516" elapsed="0.110588"/>
</kw>
<msg time="2026-10-06T01:27:36.896187" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:36.896245" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.783729" elapsed="0.112557"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.896582" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.896355" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.896338" elapsed="0.000316"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:36.783576" elapsed="0.113116"/>
</iter>
<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-10-06T01:27:36.899324" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:36.899235" elapsed="0.000132"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.899201" elapsed="0.000186"/>
</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-10-06T01:27:36.900486" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:36.900401" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.900385" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:36.900936" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:36.900710" elapsed="0.000250"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:36.901329" 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-10-06T01:27:36.901120" elapsed="0.000233"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:36.931902" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:36.901934" elapsed="0.030144"/>
</kw>
<msg time="2026-10-06T01:27:36.932248" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:36.932292" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.901506" elapsed="0.030821"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:36.988368" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "A "f "t "[78Ce "[A[78Cr
 "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:36.932951" elapsed="0.055591"/>
</kw>
<msg time="2026-10-06T01:27:36.988723" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:36.988765" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.932490" elapsed="0.056310"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.989076" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.988869" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.988851" elapsed="0.000319"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:36.989742" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "A "f "t "[78Ce "[A[78Cr
 "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:36.989385" elapsed="0.000434"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.990111" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.989881" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.989864" elapsed="0.000359"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:36.990255" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:36.992734" elapsed="0.000498"/>
</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-10-06T01:27:36.994462" elapsed="0.000482"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:36.996337" elapsed="0.000513"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:36.991035" elapsed="0.005891"/>
</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-10-06T01:27:36.990521" elapsed="0.006522"/>
</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="PASS" start="2026-10-06T01:27:36.900123" elapsed="0.097001"/>
</kw>
<msg time="2026-10-06T01:27:36.997230" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:36.997271" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.899535" elapsed="0.097771"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:36.997465" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:36.997378" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.997360" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.997878" elapsed="0.000024"/>
</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-10-06T01:27:36.998183" elapsed="0.000036"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:36.998262" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:36.898927" elapsed="0.099422"/>
</kw>
<msg time="2026-10-06T01:27:36.998432" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:36.998472" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.896964" elapsed="0.101542"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:36.998865" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:36.998574" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:36.998558" elapsed="0.000379"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:36.896803" elapsed="0.102155"/>
</iter>
<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-10-06T01:27:37.001472" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:37.001388" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.001370" elapsed="0.000165"/>
</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-10-06T01:27:37.002634" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:37.002550" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.002533" elapsed="0.000189"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:37.003098" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:37.002866" elapsed="0.000256"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:37.003471" 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-10-06T01:27:37.003293" elapsed="0.000202"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:37.038633" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:37.004074" elapsed="0.034811"/>
</kw>
<msg time="2026-10-06T01:27:37.039070" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:37.039112" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.003647" elapsed="0.035616"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:37.102285" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "A "f "t "[78Ce "[A[78Cr
 "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:37.039930" elapsed="0.062534"/>
</kw>
<msg time="2026-10-06T01:27:37.102621" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:37.102662" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.039460" elapsed="0.063261"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.103000" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:37.102794" elapsed="0.000277"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.102775" elapsed="0.000320"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:37.103640" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "A "f "t "[78Ce "[A[78Cr
 "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:37.103301" elapsed="0.000435"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.103993" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:37.103798" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.103781" elapsed="0.000304"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:37.104115" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:37.106658" elapsed="0.000501"/>
</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-10-06T01:27:37.108419" elapsed="0.000472"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:37.110080" elapsed="0.000325"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:37.104929" elapsed="0.005541"/>
</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-10-06T01:27:37.104408" elapsed="0.006179"/>
</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="PASS" start="2026-10-06T01:27:37.002291" elapsed="0.108372"/>
</kw>
<msg time="2026-10-06T01:27:37.111014" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:37.111054" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.001701" elapsed="0.109388"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:37.111328" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:37.111157" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.111141" elapsed="0.000265"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.111738" elapsed="0.000024"/>
</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-10-06T01:27:37.112046" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:37.112109" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:37.001081" elapsed="0.111113"/>
</kw>
<msg time="2026-10-06T01:27:37.112296" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:37.112335" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.999215" elapsed="0.113155"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.112653" elapsed="0.000087"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:37.112438" elapsed="0.000368"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.112422" elapsed="0.000408"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:36.999067" elapsed="0.113785"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:36.783438" elapsed="0.329441"/>
</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-10-06T01:27:36.781356" elapsed="0.331577"/>
</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-10-06T01:27:36.779443" elapsed="0.333542"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:36.779050" elapsed="0.333979"/>
</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-10-06T01:27:36.778051" elapsed="0.335026"/>
</kw>
<kw name="Check Ovsdb Shards Status After Cluster Event" owner="ClusterOvsdb">
<msg time="2026-10-06T01:27:37.114730" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>${new_cluster_list}</arg>
<doc>Check Shard Status after some cluster event.</doc>
<status status="FAIL" start="2026-10-06T01:27:37.113277" elapsed="0.001488">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Create original cluster list and check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:27:36.777462" elapsed="0.337436">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s2-s1-t17" name="Check Entity Owner Status And Find Owner and Candidate After Fail" line="89">
<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-10-06T01:27:37.116446" elapsed="0.000207"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:37.116184" elapsed="0.000536"/>
</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-10-06T01:27:37.117625" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:37.117538" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.117520" elapsed="0.000186"/>
</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-10-06T01:27:37.119577" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:37.119495" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.119478" elapsed="0.000161"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:37.120543" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:37.120220" elapsed="0.000349"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:37.121007" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:37.120733" elapsed="0.000298"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:37.121072" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:27:37.121224" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:37.119855" elapsed="0.001394"/>
</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-10-06T01:27:37.123793" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:37.123708" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.123689" elapsed="0.000167"/>
</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-10-06T01:27:37.124957" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:37.124873" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.124855" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:37.125401" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:37.125158" elapsed="0.000268"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:37.125781" 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-10-06T01:27:37.125587" elapsed="0.000218"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:37.158508" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:37.126384" elapsed="0.032320"/>
</kw>
<msg time="2026-10-06T01:27:37.158867" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:37.158910" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.125958" elapsed="0.032991"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:37.251741" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:37.159589" elapsed="0.092380"/>
</kw>
<msg time="2026-10-06T01:27:37.252138" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:37.252182" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.159153" elapsed="0.093078"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.252540" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:37.252323" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.252303" elapsed="0.000334"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:37.253378" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:37.252913" elapsed="0.000559"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.253759" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:37.253536" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.253519" elapsed="0.000336"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:37.253886" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:37.256444" elapsed="0.000527"/>
</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-10-06T01:27:37.258242" elapsed="0.000491"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:37.260134" elapsed="0.000354"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:37.254744" elapsed="0.005823"/>
</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-10-06T01:27:37.254180" elapsed="0.006522"/>
</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="PASS" start="2026-10-06T01:27:37.124591" elapsed="0.136189"/>
</kw>
<msg time="2026-10-06T01:27:37.260865" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:37.260905" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.124001" elapsed="0.136939"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:37.261096" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:37.261010" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.260992" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:37.261508" elapsed="0.000024"/>
</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-10-06T01:27:37.261904" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:37.261971" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:37.123403" elapsed="0.138656"/>
</kw>
<msg time="2026-10-06T01:27:37.262143" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:37.262183" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.121576" elapsed="0.140658"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.262525" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:37.262304" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.262288" elapsed="0.000363"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:37.121439" elapsed="0.141233"/>
</iter>
<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-10-06T01:27:37.266533" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:37.266448" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.266430" elapsed="0.000166"/>
</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-10-06T01:27:37.267723" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:37.267615" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.267598" elapsed="0.000189"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:37.268160" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:37.267931" elapsed="0.000254"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:37.268542" 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-10-06T01:27:37.268363" elapsed="0.000203"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:37.299532" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:37.269148" elapsed="0.030594"/>
</kw>
<msg time="2026-10-06T01:27:37.299902" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:37.299943" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.268737" elapsed="0.031241"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:37.388969" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:37.300579" elapsed="0.088582"/>
</kw>
<msg time="2026-10-06T01:27:37.389337" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:37.389378" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.300141" elapsed="0.089272"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.389710" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:37.389484" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.389465" elapsed="0.000341"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:37.390336" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:37.389985" elapsed="0.000439"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.390700" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:37.390486" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.390469" elapsed="0.000325"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:37.390824" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:37.393320" elapsed="0.000501"/>
</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-10-06T01:27:37.395048" elapsed="0.000460"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:37.396896" elapsed="0.000341"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:37.391595" elapsed="0.005712"/>
</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-10-06T01:27:37.391092" elapsed="0.006330"/>
</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="PASS" start="2026-10-06T01:27:37.267357" elapsed="0.130141"/>
</kw>
<msg time="2026-10-06T01:27:37.397616" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:37.397657" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.266759" elapsed="0.130955"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:37.397874" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:37.397787" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.397770" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.398279" elapsed="0.000024"/>
</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-10-06T01:27:37.398575" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:37.398640" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:37.266137" elapsed="0.132686"/>
</kw>
<msg time="2026-10-06T01:27:37.398909" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:37.398952" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.262945" elapsed="0.136044"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.399285" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:37.399058" elapsed="0.000277"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.399042" elapsed="0.000315"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:37.262806" elapsed="0.136572"/>
</iter>
<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-10-06T01:27:37.401903" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:37.401818" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.401800" elapsed="0.000170"/>
</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-10-06T01:27:37.403081" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:37.402998" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.402981" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:37.403549" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:37.403322" elapsed="0.000251"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:37.403927" 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-10-06T01:27:37.403751" elapsed="0.000200"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:37.436479" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:37.404533" elapsed="0.032181"/>
</kw>
<msg time="2026-10-06T01:27:37.436894" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:37.436936" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.404104" elapsed="0.032867"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:37.530079" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:37.437596" elapsed="0.092692"/>
</kw>
<msg time="2026-10-06T01:27:37.530449" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:37.530490" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.437151" elapsed="0.093374"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.530838" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:37.530597" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.530577" elapsed="0.000425"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:37.531543" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:37.531187" elapsed="0.000449"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.531913" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:37.531716" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.531698" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:37.532037" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:37.534619" elapsed="0.000690"/>
</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-10-06T01:27:37.536571" elapsed="0.000494"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:37.538469" elapsed="0.000361"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:37.532834" elapsed="0.006064"/>
</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-10-06T01:27:37.532316" elapsed="0.006699"/>
</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="PASS" start="2026-10-06T01:27:37.402739" elapsed="0.136355"/>
</kw>
<msg time="2026-10-06T01:27:37.539177" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:37.539235" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.402117" elapsed="0.137156"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:37.539433" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:27:37.539345" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.539328" elapsed="0.000186"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.540095" elapsed="0.000026"/>
</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-10-06T01:27:37.540436" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:37.540515" 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="PASS" start="2026-10-06T01:27:37.401505" elapsed="0.139100"/>
</kw>
<msg time="2026-10-06T01:27:37.540708" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:37.540749" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.399623" elapsed="0.141161"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.541069" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:37.540854" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.540837" elapsed="0.000303"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:37.399488" elapsed="0.141673"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:37.121299" elapsed="0.419889"/>
</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-10-06T01:27:37.119192" elapsed="0.422066"/>
</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-10-06T01:27:37.117282" elapsed="0.424026"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.116865" elapsed="0.424485"/>
</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-10-06T01:27:37.115848" elapsed="0.425551"/>
</kw>
<kw name="Get Ovsdb Entity Owner Status For One Device" owner="ClusterOvsdb">
<msg time="2026-10-06T01:27:37.545310" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<var>${new_owner}</var>
<var>${new_candidate_list}</var>
<arg>ovsdb://uuid/${ovsdb_uuid}</arg>
<arg>${original_candidate}</arg>
<arg>${new_cluster_list}</arg>
<doc>Check Entity Owner Status and identify owner and successors for an ovs device ${device}. Request is sent to controller ${controller_index}.</doc>
<status status="FAIL" start="2026-10-06T01:27:37.544080" elapsed="0.001264">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Get From List" owner="Collections">
<var>${new_candidate}</var>
<arg>${new_candidate_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.545553" elapsed="0.000021"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_owner}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.545770" elapsed="0.000020"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_candidate}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.545960" elapsed="0.000019"/>
</kw>
<doc>Check Entity Owner Status and identify owner and candidate.</doc>
<status status="FAIL" start="2026-10-06T01:27:37.115296" elapsed="0.430806">Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s2-s1-t18" name="Create Bridge Manually and Verify After Fail" line="99">
<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-10-06T01:27:37.547610" elapsed="0.000219"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:37.547365" elapsed="0.000514"/>
</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-10-06T01:27:37.548788" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:37.548700" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.548668" elapsed="0.000183"/>
</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-10-06T01:27:37.550752" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:37.550652" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.550635" elapsed="0.000179"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:37.551746" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:37.551404" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:37.552190" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:37.551921" elapsed="0.000309"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:37.552271" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:27:37.552397" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:37.551017" elapsed="0.001403"/>
</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-10-06T01:27:37.555074" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:37.554986" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.554969" elapsed="0.000169"/>
</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-10-06T01:27:37.556271" elapsed="0.000064"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:37.556169" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.556151" elapsed="0.000242"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:37.556823" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:37.556563" elapsed="0.000286"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:37.557194" 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-10-06T01:27:37.557014" elapsed="0.000240"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:37.591105" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:37.557843" elapsed="0.033453"/>
</kw>
<msg time="2026-10-06T01:27:37.591458" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:37.591499" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.557411" elapsed="0.034124"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:37.674242" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:37.592147" elapsed="0.082315"/>
</kw>
<msg time="2026-10-06T01:27:37.674659" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:37.674726" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.591724" elapsed="0.083083"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.675112" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:37.674891" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.674871" elapsed="0.000376"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:37.675799" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:37.675430" elapsed="0.000454"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.676149" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:37.675949" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.675930" elapsed="0.000327"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:37.676288" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:37.678800" elapsed="0.000487"/>
</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-10-06T01:27:37.680506" elapsed="0.000471"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:37.682366" elapsed="0.000304"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:37.677095" elapsed="0.005659"/>
</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-10-06T01:27:37.676562" elapsed="0.006308"/>
</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="PASS" start="2026-10-06T01:27:37.555908" elapsed="0.127042"/>
</kw>
<msg time="2026-10-06T01:27:37.683036" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:37.683076" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.555303" elapsed="0.127809"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:37.683279" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:37.683181" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.683164" elapsed="0.000191"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:37.683669" elapsed="0.000110"/>
</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-10-06T01:27:37.684060" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:37.684125" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:37.554674" elapsed="0.129549"/>
</kw>
<msg time="2026-10-06T01:27:37.684317" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:37.684373" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.552763" elapsed="0.131662"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.684764" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:37.684522" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.684500" elapsed="0.000337"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:37.552608" elapsed="0.132250"/>
</iter>
<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-10-06T01:27:37.687625" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:37.687540" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.687522" elapsed="0.000181"/>
</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-10-06T01:27:37.688822" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:37.688736" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.688718" elapsed="0.000205"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:37.689318" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:37.689074" elapsed="0.000269"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:37.689702" 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-10-06T01:27:37.689506" elapsed="0.000222"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:37.720569" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:37.690308" elapsed="0.030479"/>
</kw>
<msg time="2026-10-06T01:27:37.720944" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:37.720986" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.689882" elapsed="0.031139"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:37.795860" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:37.721622" elapsed="0.074424"/>
</kw>
<msg time="2026-10-06T01:27:37.796218" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:37.796261" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.721186" elapsed="0.075111"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.796571" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:37.796369" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.796350" elapsed="0.000316"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:37.797236" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:37.796869" elapsed="0.000454"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.797581" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:37.797384" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.797368" elapsed="0.000321"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:37.797721" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:37.800140" elapsed="0.000481"/>
</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-10-06T01:27:37.801845" elapsed="0.000479"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:37.803658" elapsed="0.000320"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:37.798488" elapsed="0.005555"/>
</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-10-06T01:27:37.797986" elapsed="0.006171"/>
</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="PASS" start="2026-10-06T01:27:37.688441" elapsed="0.115809"/>
</kw>
<msg time="2026-10-06T01:27:37.804332" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:37.804371" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.687851" elapsed="0.116556"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:37.804560" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:37.804475" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.804458" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.805025" elapsed="0.000023"/>
</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-10-06T01:27:37.805376" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:37.805442" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:37.687080" elapsed="0.118447"/>
</kw>
<msg time="2026-10-06T01:27:37.805610" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:37.805649" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.685122" elapsed="0.120579"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.805990" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:37.805770" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.805754" elapsed="0.000308"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:37.684983" elapsed="0.121100"/>
</iter>
<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-10-06T01:27:37.808668" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:37.808584" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.808566" elapsed="0.000186"/>
</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-10-06T01:27:37.809844" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:37.809760" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.809743" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:37.810286" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:37.810049" elapsed="0.000262"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:37.810646" 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-10-06T01:27:37.810470" elapsed="0.000200"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:37.843084" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:37.811277" elapsed="0.031999"/>
</kw>
<msg time="2026-10-06T01:27:37.843437" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:37.843479" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.810856" elapsed="0.032659"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:37.915508" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:37.844145" elapsed="0.071566"/>
</kw>
<msg time="2026-10-06T01:27:37.915870" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:37.915912" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.843705" elapsed="0.072242"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.916237" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:37.916018" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.915999" elapsed="0.000333"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:37.916870" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:37.916514" elapsed="0.000439"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.917224" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:37.917014" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.916997" elapsed="0.000322"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:37.917349" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:37.919859" elapsed="0.000491"/>
</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-10-06T01:27:37.921596" elapsed="0.000480"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:37.923301" elapsed="0.000312"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:37.918179" elapsed="0.005750"/>
</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-10-06T01:27:37.917655" elapsed="0.006395"/>
</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="PASS" start="2026-10-06T01:27:37.809480" elapsed="0.114648"/>
</kw>
<msg time="2026-10-06T01:27:37.924225" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:37.924266" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.808899" elapsed="0.115403"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:37.924457" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:37.924372" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.924355" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.924866" elapsed="0.000024"/>
</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-10-06T01:27:37.925163" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:37.925242" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:37.808293" elapsed="0.117035"/>
</kw>
<msg time="2026-10-06T01:27:37.925412" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:37.925452" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.806341" elapsed="0.119146"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:37.925850" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:37.925554" elapsed="0.000347"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.925538" elapsed="0.000385"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:37.806191" elapsed="0.119753"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:37.552470" elapsed="0.373500"/>
</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-10-06T01:27:37.550356" elapsed="0.375667"/>
</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-10-06T01:27:37.548431" elapsed="0.377644"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.548029" elapsed="0.378086"/>
</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-10-06T01:27:37.547012" elapsed="0.379151"/>
</kw>
<kw name="Create Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:27:37.929038" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Create bridge br-s1 using OVS command and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:27:37.927752" elapsed="0.001320">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Create bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:27:37.546461" elapsed="0.382751">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s2-s1-t19" name="Add Port Manually and Verify After Fail" line="103">
<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-10-06T01:27:37.930639" elapsed="0.000215"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:37.930397" elapsed="0.000508"/>
</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-10-06T01:27:37.931803" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:37.931715" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.931697" elapsed="0.000168"/>
</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-10-06T01:27:37.933802" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:37.933718" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.933701" elapsed="0.000164"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:37.934785" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:37.934437" elapsed="0.000374"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:37.935248" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:37.934960" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:37.935314" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:27:37.935440" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:37.934065" elapsed="0.001398"/>
</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-10-06T01:27:37.938010" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:37.937926" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.937909" elapsed="0.000166"/>
</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-10-06T01:27:37.939220" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:37.939122" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:37.939105" elapsed="0.000179"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:37.939649" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:37.939426" elapsed="0.000247"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:37.940028" 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-10-06T01:27:37.939851" elapsed="0.000201"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:37.973080" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:37.940655" elapsed="0.032636"/>
</kw>
<msg time="2026-10-06T01:27:37.973453" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:37.973496" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.940239" elapsed="0.033294"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:38.043507" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:37.974152" elapsed="0.069563"/>
</kw>
<msg time="2026-10-06T01:27:38.043876" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:38.043918" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.973718" elapsed="0.070236"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:38.044248" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:38.044027" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.044008" elapsed="0.000335"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:38.044884" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:38.044527" elapsed="0.000443"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:38.045250" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:38.045037" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.045019" elapsed="0.000324"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:38.045374" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:38.047882" elapsed="0.000590"/>
</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-10-06T01:27:38.049710" elapsed="0.000452"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:38.051541" elapsed="0.000323"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:38.046166" elapsed="0.005765"/>
</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-10-06T01:27:38.045645" elapsed="0.006408"/>
</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="PASS" start="2026-10-06T01:27:37.938865" elapsed="0.113266"/>
</kw>
<msg time="2026-10-06T01:27:38.052232" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:38.052273" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.938235" elapsed="0.114074"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:38.052465" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:38.052380" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.052363" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:38.052939" elapsed="0.000024"/>
</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-10-06T01:27:38.053274" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:38.053340" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:37.937607" elapsed="0.115818"/>
</kw>
<msg time="2026-10-06T01:27:38.053509" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:38.053548" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.935802" elapsed="0.117782"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:38.053889" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:38.053652" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.053636" elapsed="0.000325"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:37.935649" elapsed="0.118334"/>
</iter>
<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-10-06T01:27:38.056558" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:38.056474" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.056457" elapsed="0.000164"/>
</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-10-06T01:27:38.057741" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:38.057633" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.057616" elapsed="0.000188"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:38.058176" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:38.057946" elapsed="0.000286"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:38.058578" 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-10-06T01:27:38.058399" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:38.089394" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:38.059183" elapsed="0.030405"/>
</kw>
<msg time="2026-10-06T01:27:38.089766" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:38.089808" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:38.058773" elapsed="0.031071"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:38.155090" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:38.090442" elapsed="0.064931"/>
</kw>
<msg time="2026-10-06T01:27:38.155549" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:38.155592" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:38.090006" elapsed="0.065623"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:38.155969" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:38.155736" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.155711" elapsed="0.000356"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:38.156704" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:38.156300" elapsed="0.000489"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:38.157050" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:38.156852" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.156835" elapsed="0.000309"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:38.157176" elapsed="0.000061"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:38.159789" elapsed="0.000500"/>
</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-10-06T01:27:38.161526" elapsed="0.000492"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:38.163467" elapsed="0.000333"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:38.158041" elapsed="0.005827"/>
</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-10-06T01:27:38.157506" elapsed="0.006478"/>
</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="PASS" start="2026-10-06T01:27:38.057374" elapsed="0.106688"/>
</kw>
<msg time="2026-10-06T01:27:38.164146" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:38.164185" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:38.056783" elapsed="0.107454"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:38.164394" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:38.164309" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.164292" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:38.164841" elapsed="0.000025"/>
</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-10-06T01:27:38.165147" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:38.165228" 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="PASS" start="2026-10-06T01:27:38.056169" elapsed="0.109148"/>
</kw>
<msg time="2026-10-06T01:27:38.165404" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:38.165445" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:38.054243" elapsed="0.111238"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:38.165882" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:38.165552" elapsed="0.000381"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.165536" elapsed="0.000419"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:38.054094" elapsed="0.111883"/>
</iter>
<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-10-06T01:27:38.168573" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:38.168487" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.168470" elapsed="0.000166"/>
</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-10-06T01:27:38.169805" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:38.169719" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.169701" elapsed="0.000167"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:38.170255" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:38.170011" elapsed="0.000269"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:38.170622" 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-10-06T01:27:38.170439" elapsed="0.000207"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:38.209706" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:38.171245" elapsed="0.038643"/>
</kw>
<msg time="2026-10-06T01:27:38.210065" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:38.210107" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:38.170817" elapsed="0.039325"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:38.284370" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:38.210763" elapsed="0.073809"/>
</kw>
<msg time="2026-10-06T01:27:38.284753" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:38.284795" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:38.210321" elapsed="0.074510"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:38.285107" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:38.284903" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.284884" elapsed="0.000329"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:38.285746" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:38.285393" elapsed="0.000435"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:38.286086" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:38.285890" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.285873" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:38.286222" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:38.288743" elapsed="0.000488"/>
</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-10-06T01:27:38.290454" elapsed="0.000480"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:38.292342" elapsed="0.000309"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:38.287004" elapsed="0.005731"/>
</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-10-06T01:27:38.286489" elapsed="0.006364"/>
</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="PASS" start="2026-10-06T01:27:38.169436" elapsed="0.123493"/>
</kw>
<msg time="2026-10-06T01:27:38.293012" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:38.293051" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:38.168836" elapsed="0.124250"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:38.293253" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:38.293156" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.293138" elapsed="0.000193"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:38.293648" elapsed="0.000144"/>
</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-10-06T01:27:38.294080" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:38.294145" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:38.168161" elapsed="0.126086"/>
</kw>
<msg time="2026-10-06T01:27:38.294332" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:38.294372" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:38.166247" elapsed="0.128160"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:38.294713" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:38.294477" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.294460" elapsed="0.000326"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:38.166095" elapsed="0.128713"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:37.935510" elapsed="0.359327"/>
</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-10-06T01:27:37.933374" elapsed="0.361520"/>
</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-10-06T01:27:37.931444" elapsed="0.363507"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:37.931049" elapsed="0.363951"/>
</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-10-06T01:27:37.930044" elapsed="0.365010"/>
</kw>
<kw name="Add Sample Port To The Manual Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:27:38.298008" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Add Port vx1 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:27:38.296716" elapsed="0.001327">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Add port with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:27:37.929517" elapsed="0.368661">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s2-s1-t20" name="Create Tap Device After Fail" line="107">
<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-10-06T01:27:38.299590" elapsed="0.000217"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:38.299345" elapsed="0.000511"/>
</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-10-06T01:27:38.300766" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:38.300662" elapsed="0.000147"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.300644" elapsed="0.000186"/>
</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-10-06T01:27:38.302711" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:38.302612" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.302595" elapsed="0.000179"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:38.303665" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:38.303341" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:38.304128" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:38.303857" elapsed="0.000295"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:38.304205" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:27:38.304333" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:38.302975" elapsed="0.001380"/>
</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-10-06T01:27:38.306866" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:38.306781" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.306764" elapsed="0.000165"/>
</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-10-06T01:27:38.308040" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:38.307957" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.307940" elapsed="0.000196"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:38.308525" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:38.308296" elapsed="0.000254"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:38.308909" 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-10-06T01:27:38.308729" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:38.342028" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:38.309515" elapsed="0.032739"/>
</kw>
<msg time="2026-10-06T01:27:38.342414" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:38.342456" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:38.309086" elapsed="0.033406"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:38.401473" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "A "f "t "e "r "[78C[C "[A[78CF
 "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:38.343097" elapsed="0.058557"/>
</kw>
<msg time="2026-10-06T01:27:38.401838" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:38.401879" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:38.342658" elapsed="0.059257"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:38.402227" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:38.401987" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.401969" elapsed="0.000355"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:38.402863" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "A "f "t "e "r "[78C[C "[A[78CF
 "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:38.402506" elapsed="0.000434"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:38.403213" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:38.403001" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.402985" elapsed="0.000321"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:38.403337" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:38.405809" elapsed="0.000488"/>
</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-10-06T01:27:38.407545" elapsed="0.000477"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:38.409450" elapsed="0.000331"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:38.404112" elapsed="0.005736"/>
</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-10-06T01:27:38.403600" elapsed="0.006365"/>
</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="PASS" start="2026-10-06T01:27:38.307698" elapsed="0.102344"/>
</kw>
<msg time="2026-10-06T01:27:38.410122" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:38.410161" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:38.307075" elapsed="0.103138"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:38.410368" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:38.410283" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.410266" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:38.410839" elapsed="0.000024"/>
</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-10-06T01:27:38.411176" elapsed="0.000039"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:38.411259" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:38.306476" elapsed="0.104869"/>
</kw>
<msg time="2026-10-06T01:27:38.411428" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:38.411467" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:38.304696" elapsed="0.106806"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:38.411805" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:38.411570" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.411555" elapsed="0.000322"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:38.304545" elapsed="0.107354"/>
</iter>
<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-10-06T01:27:38.415732" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:38.415630" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.415613" elapsed="0.000183"/>
</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-10-06T01:27:38.416914" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:38.416829" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.416812" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:38.417364" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:38.417122" elapsed="0.000267"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:38.417746" 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-10-06T01:27:38.417550" elapsed="0.000220"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:38.448169" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:38.418362" elapsed="0.030001"/>
</kw>
<msg time="2026-10-06T01:27:38.448521" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:38.448562" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:38.417924" elapsed="0.030673"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:38.503934" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "A "f "t "e "r "[78C[C "[A[78CF
 "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:38.449240" elapsed="0.054870"/>
</kw>
<msg time="2026-10-06T01:27:38.504286" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:38.504328" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:38.448782" elapsed="0.055582"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:38.504641" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:38.504436" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.504418" elapsed="0.000343"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:38.505296" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "A "f "t "e "r "[78C[C "[A[78CF
 "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:38.504942" elapsed="0.000432"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:38.505632" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:38.505435" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.505419" elapsed="0.000327"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:38.505776" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:38.508324" elapsed="0.000498"/>
</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-10-06T01:27:38.510042" elapsed="0.000467"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:38.511954" elapsed="0.000327"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:38.506636" elapsed="0.005711"/>
</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-10-06T01:27:38.506045" elapsed="0.006420"/>
</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="PASS" start="2026-10-06T01:27:38.416543" elapsed="0.095999"/>
</kw>
<msg time="2026-10-06T01:27:38.512623" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:38.512663" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:38.415943" elapsed="0.096772"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:38.512871" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:38.512785" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.512768" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:38.513278" elapsed="0.000023"/>
</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-10-06T01:27:38.513573" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:38.513638" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:38.415336" elapsed="0.098435"/>
</kw>
<msg time="2026-10-06T01:27:38.513855" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:38.513895" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:38.412143" elapsed="0.101786"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:38.514227" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:38.513997" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.513981" elapsed="0.000320"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:38.412007" elapsed="0.102315"/>
</iter>
<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-10-06T01:27:38.516879" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:38.516794" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.516777" elapsed="0.000166"/>
</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-10-06T01:27:38.518070" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:38.517986" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.517967" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:38.518515" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:38.518290" elapsed="0.000249"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:38.518893" 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-10-06T01:27:38.518715" elapsed="0.000201"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:38.551033" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:38.519499" elapsed="0.031733"/>
</kw>
<msg time="2026-10-06T01:27:38.551405" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:38.551446" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:38.519068" elapsed="0.032414"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:38.615164" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "A "f "t "e "r "[78C[C "[A[78CF
 "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:38.552122" elapsed="0.063283"/>
</kw>
<msg time="2026-10-06T01:27:38.615566" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:38.615607" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:38.551669" elapsed="0.063975"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:38.615946" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:38.615739" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.615720" elapsed="0.000321"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:38.616585" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "A "f "t "e "r "[78C[C "[A[78CF
 "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:38.616233" elapsed="0.000432"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:38.616945" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:38.616747" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.616729" elapsed="0.000310"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:38.617069" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:38.619557" elapsed="0.000498"/>
</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-10-06T01:27:38.621334" elapsed="0.000481"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:38.623220" elapsed="0.000309"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:38.617866" elapsed="0.005731"/>
</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-10-06T01:27:38.617350" elapsed="0.006382"/>
</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="PASS" start="2026-10-06T01:27:38.517723" elapsed="0.106087"/>
</kw>
<msg time="2026-10-06T01:27:38.623891" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:38.623931" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:38.517090" elapsed="0.106876"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:38.624120" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:38.624036" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.624019" elapsed="0.000194"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:38.624584" elapsed="0.000032"/>
</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-10-06T01:27:38.625002" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:38.625070" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:38.516480" elapsed="0.108676"/>
</kw>
<msg time="2026-10-06T01:27:38.625261" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:38.625301" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:38.514565" elapsed="0.110771"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:38.625622" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:38.625407" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.625390" elapsed="0.000321"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:38.514430" elapsed="0.111303"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:38.304405" elapsed="0.321354"/>
</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-10-06T01:27:38.302320" elapsed="0.323491"/>
</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-10-06T01:27:38.300409" elapsed="0.325498"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:38.299997" elapsed="0.325954"/>
</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-10-06T01:27:38.298999" elapsed="0.326999"/>
</kw>
<kw name="Create Sample Tap Device" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:38.628400" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:38.628148" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:38.627966" elapsed="0.000510"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:38.628836" 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-10-06T01:27:38.628929" 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-10-06T01:27:38.628701" elapsed="0.000253"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:38.629467" level="INFO">Attempting to execute command "ip tuntap add mode tap vport1" on remote system "10.30.170.234" 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-10-06T01:27:38.629141" elapsed="0.000369"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:38.630008" level="INFO">${conn_id} = 483</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-10-06T01:27:38.629702" elapsed="0.000330"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:27:38.630882" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:27:38.630952" 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-10-06T01:27:38.630602" elapsed="0.000372"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:38.631121" elapsed="0.000300"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:27:38.632211" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:27:39.028464" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:27:23 UTC 2026

  System load:  0.03               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:27:28 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:27:38.631966" elapsed="0.396584"/>
</kw>
<msg time="2026-10-06T01:27:39.028608" 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-10-06T01:27:38.631582" elapsed="0.397086"/>
</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-10-06T01:27:38.630245" elapsed="0.398519"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:27:39.029138" level="INFO">Executing command 'ip tuntap add mode tap vport1'.</msg>
<msg time="2026-10-06T01:27:39.042219" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-10-06T01:27:39.042394" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:27:39.042456" level="INFO">${stderr} = ioctl(TUNSETIFF): Operation not permitted</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-10-06T01:27:39.028974" elapsed="0.013514"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:39.042745" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:39.043856" level="INFO">ioctl(TUNSETIFF): Operation not permitted</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:39.043467" elapsed="0.000451"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:27:39.044149" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:39.044015" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:39.043986" elapsed="0.000277"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:27:39.044450" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-10-06T01:27:39.044333" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:39.044313" elapsed="0.000266"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:27:39.044696" elapsed="0.000024"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:39.045695" elapsed="0.000391"/>
</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-10-06T01:27:39.046357" elapsed="0.000191"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:39.046764" elapsed="0.000125"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:39.045102" elapsed="0.001853"/>
</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-10-06T01:27:38.627546" elapsed="0.419504"/>
</kw>
<msg time="2026-10-06T01:27:39.047114" 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-10-06T01:27:38.627020" elapsed="0.420156"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ip tuntap add mode tap vport1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:27:38.626538" elapsed="0.420751"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:39.050150" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:39.049827" elapsed="0.000413"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:39.049803" elapsed="0.000468"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:39.050722" 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-10-06T01:27:39.050852" 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-10-06T01:27:39.050536" elapsed="0.000350"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:39.051564" level="INFO">Attempting to execute command "ip tuntap add mode tap vport2" on remote system "10.30.170.234" 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-10-06T01:27:39.051151" elapsed="0.000473"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:39.052313" level="INFO">${conn_id} = 485</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-10-06T01:27:39.051889" elapsed="0.000459"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:27:39.053656" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:27:39.053807" 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-10-06T01:27:39.053212" elapsed="0.000629"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:39.054080" elapsed="0.000528"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:27:39.055811" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:27:39.438095" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:27:23 UTC 2026

  System load:  0.03               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:27:38 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:27:39.055463" elapsed="0.382731"/>
</kw>
<msg time="2026-10-06T01:27:39.438253" 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-10-06T01:27:39.054875" elapsed="0.383438"/>
</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-10-06T01:27:39.052612" elapsed="0.385779"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:27:39.438843" level="INFO">Executing command 'ip tuntap add mode tap vport2'.</msg>
<msg time="2026-10-06T01:27:39.451484" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-10-06T01:27:39.451624" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:27:39.451704" level="INFO">${stderr} = ioctl(TUNSETIFF): Operation not permitted</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-10-06T01:27:39.438602" elapsed="0.013135"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:39.451953" elapsed="0.000295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:39.452897" level="INFO">ioctl(TUNSETIFF): Operation not permitted</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:39.452540" elapsed="0.000414"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:27:39.453178" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:39.453045" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:39.453018" elapsed="0.000271"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:27:39.453495" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:27:39.453356" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:39.453337" elapsed="0.000268"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:27:39.453648" elapsed="0.000018"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:39.454712" elapsed="0.000508"/>
</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-10-06T01:27:39.455484" elapsed="0.000248"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:39.455934" elapsed="0.000127"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:39.454069" elapsed="0.002062"/>
</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-10-06T01:27:39.049212" elapsed="0.407046"/>
</kw>
<msg time="2026-10-06T01:27:39.456351" 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-10-06T01:27:39.048218" elapsed="0.408203"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ip tuntap add mode tap vport2</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:27:39.047531" elapsed="0.409005"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:39.459416" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:39.459074" elapsed="0.000415"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:39.459049" elapsed="0.000471"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:39.459973" 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-10-06T01:27:39.460099" 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-10-06T01:27:39.459802" elapsed="0.000332"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:39.460835" level="INFO">Attempting to execute command "ifconfig vport1 up" on remote system "10.30.170.234" 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-10-06T01:27:39.460413" elapsed="0.000480"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:39.461558" level="INFO">${conn_id} = 487</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-10-06T01:27:39.461134" elapsed="0.000458"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:27:39.462747" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:27:39.462843" 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-10-06T01:27:39.462387" elapsed="0.000486"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:39.463077" elapsed="0.000408"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:27:39.464569" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:27:39.844463" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:27:23 UTC 2026

  System load:  0.03               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:27:39 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:27:39.464251" elapsed="0.380459"/>
</kw>
<msg time="2026-10-06T01:27:39.844798" 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-10-06T01:27:39.463730" elapsed="0.381153"/>
</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-10-06T01:27:39.461877" elapsed="0.383118"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:27:39.845542" level="INFO">Executing command 'ifconfig vport1 up'.</msg>
<msg time="2026-10-06T01:27:39.858172" level="INFO">Command exited with return code 255.</msg>
<msg time="2026-10-06T01:27:39.858345" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:27:39.858401" level="INFO">${stderr} = vport1: ERROR while getting interface flags: No such device</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-10-06T01:27:39.845297" elapsed="0.013135"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:39.858668" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:39.859745" level="INFO">vport1: ERROR while getting interface flags: No such device</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:39.859343" elapsed="0.000462"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:27:39.860078" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:39.859915" elapsed="0.000229"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:39.859881" elapsed="0.000295"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:27:39.860377" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-10-06T01:27:39.860262" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:39.860241" elapsed="0.000246"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:27:39.860531" elapsed="0.000018"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:39.861565" elapsed="0.000428"/>
</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-10-06T01:27:39.862265" elapsed="0.000477"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:39.862945" elapsed="0.000126"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:39.860976" elapsed="0.002163"/>
</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-10-06T01:27:39.458463" elapsed="0.404791"/>
</kw>
<msg time="2026-10-06T01:27:39.863322" 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-10-06T01:27:39.457427" elapsed="0.405960"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ifconfig vport1 up</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:27:39.456822" elapsed="0.406664"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:39.866050" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:39.865723" elapsed="0.000400"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:39.865696" elapsed="0.000459"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:39.866611" 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-10-06T01:27:39.866760" 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-10-06T01:27:39.866437" elapsed="0.000358"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:39.867474" level="INFO">Attempting to execute command "ifconfig vport2 up" on remote system "10.30.170.234" 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-10-06T01:27:39.867053" elapsed="0.000481"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:39.868235" level="INFO">${conn_id} = 489</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-10-06T01:27:39.867798" elapsed="0.000472"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:27:39.869417" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:27:39.869513" 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-10-06T01:27:39.869051" elapsed="0.000492"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:39.869834" elapsed="0.000411"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:27:39.871336" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:27:40.252489" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:27:23 UTC 2026

  System load:  0.03               Processes:             108
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:27:39 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:27:39.870994" elapsed="0.381570"/>
</kw>
<msg time="2026-10-06T01:27:40.252618" 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-10-06T01:27:39.870470" elapsed="0.382201"/>
</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-10-06T01:27:39.868536" elapsed="0.384232"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:27:40.253114" level="INFO">Executing command 'ifconfig vport2 up'.</msg>
<msg time="2026-10-06T01:27:40.266051" level="INFO">Command exited with return code 255.</msg>
<msg time="2026-10-06T01:27:40.266206" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:27:40.266262" level="INFO">${stderr} = vport2: ERROR while getting interface flags: No such device</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-10-06T01:27:40.252964" elapsed="0.013328"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:40.266507" elapsed="0.000517"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:40.267655" level="INFO">vport2: ERROR while getting interface flags: No such device</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:40.267327" elapsed="0.000408"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:27:40.267954" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:40.267826" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.267799" elapsed="0.000244"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:27:40.268240" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:27:40.268109" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.268090" elapsed="0.000257"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:27:40.268389" elapsed="0.000018"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:40.269347" elapsed="0.000409"/>
</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-10-06T01:27:40.270010" elapsed="0.000203"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:40.270406" elapsed="0.000124"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:40.268798" elapsed="0.001798"/>
</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-10-06T01:27:39.865101" elapsed="0.405610"/>
</kw>
<msg time="2026-10-06T01:27:40.270775" 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-10-06T01:27:39.864362" elapsed="0.406474"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ifconfig vport2 up</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:27:39.863758" elapsed="0.407175"/>
</kw>
<doc>Create Tap Device vport1 and vport2 to add to the bridge br-s1 using OVS command.</doc>
<status status="PASS" start="2026-10-06T01:27:38.626211" elapsed="1.644792"/>
</kw>
<doc>Create tap devices to add to the bridge in ovs</doc>
<status status="PASS" start="2026-10-06T01:27:38.298512" elapsed="1.972633"/>
</test>
<test id="s1-s2-s1-t21" name="Add Tap Device Manually and Verify After Fail" line="111">
<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-10-06T01:27:40.273278" elapsed="0.000289"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:40.272909" elapsed="0.000727"/>
</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-10-06T01:27:40.275001" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:40.274878" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.274854" elapsed="0.000240"/>
</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-10-06T01:27:40.277828" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:40.277710" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.277668" elapsed="0.000246"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:40.279210" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:40.278732" elapsed="0.000514"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:40.279862" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:40.279456" elapsed="0.000440"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:40.279953" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:27:40.280127" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:40.278214" elapsed="0.001944"/>
</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-10-06T01:27:40.283866" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:40.283746" elapsed="0.000180"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.283719" elapsed="0.000236"/>
</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-10-06T01:27:40.285554" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:40.285436" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.285412" elapsed="0.000229"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:40.286223" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:40.285867" elapsed="0.000391"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:40.286779" 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-10-06T01:27:40.286484" elapsed="0.000329"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:40.320690" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:40.287733" elapsed="0.033159"/>
</kw>
<msg time="2026-10-06T01:27:40.321060" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:40.321101" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.287028" elapsed="0.034106"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:40.405613" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:40.321756" elapsed="0.084053"/>
</kw>
<msg time="2026-10-06T01:27:40.405968" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:40.406009" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.321308" elapsed="0.084734"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:40.406329" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:40.406111" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.406093" elapsed="0.000329"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:40.406971" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:40.406603" elapsed="0.000453"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:40.407327" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:40.407117" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.407100" elapsed="0.000352"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:40.407483" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:40.409994" elapsed="0.000491"/>
</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-10-06T01:27:40.411754" elapsed="0.000468"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:40.413415" elapsed="0.000328"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:40.408322" elapsed="0.005489"/>
</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-10-06T01:27:40.407769" elapsed="0.006159"/>
</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="PASS" start="2026-10-06T01:27:40.285057" elapsed="0.128948"/>
</kw>
<msg time="2026-10-06T01:27:40.414088" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:40.414127" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.284159" elapsed="0.130003"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:40.414334" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:40.414248" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.414230" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:40.414764" elapsed="0.000025"/>
</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-10-06T01:27:40.415065" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:40.415130" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:40.283311" elapsed="0.131954"/>
</kw>
<msg time="2026-10-06T01:27:40.415350" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:40.415390" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.280651" elapsed="0.134773"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:40.415847" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:40.415492" elapsed="0.000407"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.415476" elapsed="0.000446"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:40.280457" elapsed="0.135486"/>
</iter>
<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-10-06T01:27:40.418490" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:40.418405" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.418387" elapsed="0.000166"/>
</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-10-06T01:27:40.419657" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:40.419574" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.419557" elapsed="0.000364"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:40.420306" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:40.420067" elapsed="0.000264"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:40.420664" 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-10-06T01:27:40.420489" elapsed="0.000213"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:40.452240" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:40.421273" elapsed="0.031151"/>
</kw>
<msg time="2026-10-06T01:27:40.452583" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:40.452624" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.420856" elapsed="0.031801"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:40.522724" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:40.453310" elapsed="0.069589"/>
</kw>
<msg time="2026-10-06T01:27:40.523057" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:40.523097" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.452873" elapsed="0.070257"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:40.523418" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:40.523214" elapsed="0.000277"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.523195" elapsed="0.000319"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:40.524056" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:40.523717" elapsed="0.000420"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:40.524409" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:40.524213" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.524196" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:40.524532" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:40.526988" elapsed="0.000485"/>
</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-10-06T01:27:40.528718" elapsed="0.000466"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:40.530528" elapsed="0.000320"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:40.525316" elapsed="0.005597"/>
</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-10-06T01:27:40.524813" elapsed="0.006214"/>
</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="PASS" start="2026-10-06T01:27:40.419315" elapsed="0.111787"/>
</kw>
<msg time="2026-10-06T01:27:40.531199" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:40.531240" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.418725" elapsed="0.112551"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:40.531430" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:40.531345" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.531328" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:40.531907" elapsed="0.000024"/>
</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-10-06T01:27:40.532223" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:40.532288" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:40.418098" elapsed="0.114275"/>
</kw>
<msg time="2026-10-06T01:27:40.532456" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:40.532496" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.416209" elapsed="0.116322"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:40.532832" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:40.532598" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.532582" elapsed="0.000357"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:40.416057" elapsed="0.116904"/>
</iter>
<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-10-06T01:27:40.535524" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:40.535439" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.535421" elapsed="0.000166"/>
</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-10-06T01:27:40.536710" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:40.536604" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.536588" elapsed="0.000186"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:40.537140" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:40.536917" elapsed="0.000248"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:40.537515" 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-10-06T01:27:40.537341" elapsed="0.000198"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:40.570658" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:40.538118" elapsed="0.032743"/>
</kw>
<msg time="2026-10-06T01:27:40.571020" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:40.571064" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.537708" elapsed="0.033391"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:40.651450" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:40.571716" elapsed="0.079909"/>
</kw>
<msg time="2026-10-06T01:27:40.651806" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:40.651847" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.571276" elapsed="0.080606"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:40.652154" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:40.651952" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.651934" elapsed="0.000332"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:40.652798" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:40.652446" elapsed="0.000432"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:40.653139" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:40.652939" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.652923" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:40.653281" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:40.655747" elapsed="0.000488"/>
</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-10-06T01:27:40.657463" elapsed="0.000474"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:40.659139" elapsed="0.000324"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:40.654052" elapsed="0.005478"/>
</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-10-06T01:27:40.653543" elapsed="0.006104"/>
</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="PASS" start="2026-10-06T01:27:40.536345" elapsed="0.123567"/>
</kw>
<msg time="2026-10-06T01:27:40.659996" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:40.660035" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.535750" elapsed="0.124351"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:40.660280" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:40.660191" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.660156" elapsed="0.000201"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:40.660669" elapsed="0.000040"/>
</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-10-06T01:27:40.660985" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:40.661049" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:40.535126" elapsed="0.126008"/>
</kw>
<msg time="2026-10-06T01:27:40.661234" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:40.661274" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.533227" elapsed="0.128081"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:40.661592" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:40.661377" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.661361" elapsed="0.000302"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:40.533075" elapsed="0.128733"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:40.280250" elapsed="0.381586"/>
</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-10-06T01:27:40.277283" elapsed="0.384605"/>
</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-10-06T01:27:40.274498" elapsed="0.387439"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.273917" elapsed="0.388061"/>
</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-10-06T01:27:40.272403" elapsed="0.389621"/>
</kw>
<kw name="Add Sample Tap Device To The Manual Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:27:40.664868" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Add Tap Device vport1 and vport2 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:27:40.663568" elapsed="0.001335">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Add tap devices to the bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:27:40.271567" elapsed="0.393465">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s2-s1-t22" name="Delete the Bridge Manually and Verify After Fail" line="115">
<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-10-06T01:27:40.666442" elapsed="0.000198"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:40.666196" elapsed="0.000511"/>
</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-10-06T01:27:40.667589" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:40.667502" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.667485" elapsed="0.000167"/>
</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-10-06T01:27:40.669534" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:40.669449" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.669433" elapsed="0.000162"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:40.670516" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:40.670191" elapsed="0.000351"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:40.670980" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:40.670707" elapsed="0.000297"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:40.671045" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:27:40.671169" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:40.669817" elapsed="0.001389"/>
</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-10-06T01:27:40.673773" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:40.673672" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.673655" elapsed="0.000180"/>
</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-10-06T01:27:40.674938" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:40.674854" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.674837" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:40.675385" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:40.675146" elapsed="0.000264"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:40.675764" 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-10-06T01:27:40.675571" elapsed="0.000217"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:40.709743" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:40.676401" elapsed="0.033527"/>
</kw>
<msg time="2026-10-06T01:27:40.710088" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:40.710129" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.675942" elapsed="0.034221"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:40.789104" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:40.710784" elapsed="0.078550"/>
</kw>
<msg time="2026-10-06T01:27:40.789498" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:40.789540" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.710340" elapsed="0.079235"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:40.789879" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:40.789648" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.789629" elapsed="0.000347"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:40.790516" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:40.790153" elapsed="0.000450"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:40.790883" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:40.790665" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.790649" elapsed="0.000329"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:40.791009" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:40.793498" elapsed="0.000501"/>
</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-10-06T01:27:40.795241" elapsed="0.000462"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:40.796867" elapsed="0.000317"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:40.791812" elapsed="0.005440"/>
</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-10-06T01:27:40.791291" elapsed="0.006076"/>
</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="PASS" start="2026-10-06T01:27:40.674572" elapsed="0.122871"/>
</kw>
<msg time="2026-10-06T01:27:40.797524" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:40.797563" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.673982" elapsed="0.123648"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:40.798068" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:40.797981" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.797961" elapsed="0.000185"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:40.798474" elapsed="0.000024"/>
</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-10-06T01:27:40.798788" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:40.798854" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:40.673381" elapsed="0.125559"/>
</kw>
<msg time="2026-10-06T01:27:40.799023" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:40.799062" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.671572" elapsed="0.127525"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:40.799398" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:40.799165" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.799149" elapsed="0.000320"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:40.671433" elapsed="0.128057"/>
</iter>
<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-10-06T01:27:40.803415" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:40.803328" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.803310" elapsed="0.000169"/>
</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-10-06T01:27:40.804583" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:40.804498" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.804481" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:40.805037" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:40.804812" elapsed="0.000250"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:40.805411" 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-10-06T01:27:40.805235" elapsed="0.000200"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:40.836026" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:40.806018" elapsed="0.030199"/>
</kw>
<msg time="2026-10-06T01:27:40.836376" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:40.836417" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.805587" elapsed="0.030865"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:40.921604" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:40.837049" elapsed="0.084765"/>
</kw>
<msg time="2026-10-06T01:27:40.921972" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:40.922013" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.836614" elapsed="0.085435"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:40.922338" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:40.922118" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.922100" elapsed="0.000332"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:40.922963" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:40.922609" elapsed="0.000472"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:40.923357" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:40.923144" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.923127" elapsed="0.000324"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:40.923481" elapsed="0.000024"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:40.925953" elapsed="0.000490"/>
</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-10-06T01:27:40.927671" elapsed="0.000480"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:40.929342" elapsed="0.000304"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:40.924278" elapsed="0.005685"/>
</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-10-06T01:27:40.923768" elapsed="0.006313"/>
</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="PASS" start="2026-10-06T01:27:40.804237" elapsed="0.125920"/>
</kw>
<msg time="2026-10-06T01:27:40.930254" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:40.930294" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.803626" elapsed="0.126703"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:40.930483" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:40.930398" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.930381" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:40.930890" elapsed="0.000024"/>
</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-10-06T01:27:40.931203" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:40.931269" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:40.803014" elapsed="0.128340"/>
</kw>
<msg time="2026-10-06T01:27:40.931438" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:40.931478" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.799785" elapsed="0.131727"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:40.931840" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:40.931579" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.931563" elapsed="0.000349"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:40.799597" elapsed="0.132336"/>
</iter>
<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-10-06T01:27:40.934462" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:40.934377" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.934360" elapsed="0.000164"/>
</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-10-06T01:27:40.935626" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:40.935542" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:40.935525" elapsed="0.000185"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:40.936075" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:40.935852" elapsed="0.000246"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:40.936448" 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-10-06T01:27:40.936271" elapsed="0.000200"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:40.969518" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:40.937051" elapsed="0.032670"/>
</kw>
<msg time="2026-10-06T01:27:40.969931" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:40.969973" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.936623" elapsed="0.033386"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:41.054915" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:40.970606" elapsed="0.084491"/>
</kw>
<msg time="2026-10-06T01:27:41.055287" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:41.055329" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.970185" elapsed="0.085179"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.055636" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:41.055435" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.055416" elapsed="0.000341"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:41.056286" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:41.055934" elapsed="0.000437"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.056628" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:41.056432" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.056416" elapsed="0.000324"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:41.056771" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:41.059242" elapsed="0.000510"/>
</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-10-06T01:27:41.060985" elapsed="0.000470"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:41.062638" elapsed="0.000331"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:41.057540" elapsed="0.005494"/>
</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-10-06T01:27:41.057038" elapsed="0.006113"/>
</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="PASS" start="2026-10-06T01:27:40.935285" elapsed="0.127958"/>
</kw>
<msg time="2026-10-06T01:27:41.063325" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:41.063365" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.934670" elapsed="0.128731"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:41.063557" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:41.063469" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.063452" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.064248" elapsed="0.000025"/>
</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-10-06T01:27:41.064549" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:41.064613" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:40.934071" elapsed="0.130644"/>
</kw>
<msg time="2026-10-06T01:27:41.064800" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:41.064840" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.932197" elapsed="0.132677"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.065210" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:41.064977" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.064960" elapsed="0.000323"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:40.932042" elapsed="0.133263"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:40.671292" elapsed="0.394040"/>
</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-10-06T01:27:40.669144" elapsed="0.396236"/>
</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-10-06T01:27:40.667251" elapsed="0.398178"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:40.666851" elapsed="0.398618"/>
</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-10-06T01:27:40.665835" elapsed="0.399681"/>
</kw>
<kw name="Delete Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:27:41.068350" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Delete bridge br-s1 using OVS command and verify it gets applied in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:27:41.067052" elapsed="0.001332">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Delete bridge with OVS command and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:27:40.665325" elapsed="0.403182">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s2-s1-t23" name="Create Bridge In Owner and Verify After Fail" line="119">
<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-10-06T01:27:41.069875" elapsed="0.000197"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:41.069610" elapsed="0.000512"/>
</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-10-06T01:27:41.071024" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:41.070939" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.070922" elapsed="0.000165"/>
</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-10-06T01:27:41.073003" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:41.072920" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.072904" elapsed="0.000161"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:41.073971" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:41.073632" elapsed="0.000364"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:41.074429" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:41.074146" elapsed="0.000307"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:41.074493" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:27:41.074619" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:41.073280" elapsed="0.001361"/>
</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-10-06T01:27:41.077140" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:41.077056" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.077038" elapsed="0.000181"/>
</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-10-06T01:27:41.078302" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:41.078217" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.078200" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:41.078749" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:41.078506" elapsed="0.000268"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:41.079111" 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-10-06T01:27:41.078934" elapsed="0.000201"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:41.112573" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:41.079725" elapsed="0.033045"/>
</kw>
<msg time="2026-10-06T01:27:41.112926" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:41.112968" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.079300" elapsed="0.033745"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:41.187702" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:41.113646" elapsed="0.074240"/>
</kw>
<msg time="2026-10-06T01:27:41.188045" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:41.188087" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.113224" elapsed="0.074904"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.188472" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:41.188238" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.188213" elapsed="0.000369"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:41.189132" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:41.188787" elapsed="0.000447"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.189535" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:41.189301" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.189280" elapsed="0.000355"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:41.189666" elapsed="0.000044"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:41.192134" elapsed="0.000483"/>
</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-10-06T01:27:41.193847" elapsed="0.000459"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:41.195488" elapsed="0.000428"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:41.190461" elapsed="0.005522"/>
</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-10-06T01:27:41.189952" elapsed="0.006146"/>
</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="PASS" start="2026-10-06T01:27:41.077946" elapsed="0.118243"/>
</kw>
<msg time="2026-10-06T01:27:41.196274" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:41.196314" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.077366" elapsed="0.118983"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:41.196503" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:41.196419" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.196401" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:41.197086" elapsed="0.000024"/>
</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-10-06T01:27:41.197400" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:41.197465" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:41.076764" elapsed="0.120787"/>
</kw>
<msg time="2026-10-06T01:27:41.197635" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:41.197692" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.074977" elapsed="0.122754"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.198017" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:41.197800" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.197783" elapsed="0.000340"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:41.074840" elapsed="0.123306"/>
</iter>
<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-10-06T01:27:41.200694" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:41.200592" elapsed="0.000147"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.200574" elapsed="0.000186"/>
</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-10-06T01:27:41.201862" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:41.201778" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.201761" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:41.202313" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:41.202067" elapsed="0.000271"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:41.202674" 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-10-06T01:27:41.202499" elapsed="0.000217"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:41.235509" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:41.203298" elapsed="0.032417"/>
</kw>
<msg time="2026-10-06T01:27:41.235875" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:41.235917" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.202871" elapsed="0.033081"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:41.309195" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:41.236551" elapsed="0.072825"/>
</kw>
<msg time="2026-10-06T01:27:41.309534" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:41.309576" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.236117" elapsed="0.073495"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.309915" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:41.309708" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.309665" elapsed="0.000345"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:41.310542" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:41.310204" elapsed="0.000421"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.310903" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:41.310705" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.310671" elapsed="0.000326"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:41.311028" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:41.313524" elapsed="0.000496"/>
</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-10-06T01:27:41.315261" elapsed="0.000475"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:41.317121" elapsed="0.000324"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:41.311846" elapsed="0.005666"/>
</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-10-06T01:27:41.311330" elapsed="0.006299"/>
</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="PASS" start="2026-10-06T01:27:41.201496" elapsed="0.116225"/>
</kw>
<msg time="2026-10-06T01:27:41.317838" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:41.317878" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.200909" elapsed="0.117006"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:41.318070" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:41.317986" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.317968" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.318475" elapsed="0.000024"/>
</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-10-06T01:27:41.318825" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:41.318891" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:41.200300" elapsed="0.118677"/>
</kw>
<msg time="2026-10-06T01:27:41.319061" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:41.319101" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.198406" elapsed="0.120731"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.319436" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:41.319220" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.319204" elapsed="0.000303"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:41.198268" elapsed="0.121260"/>
</iter>
<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-10-06T01:27:41.322093" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:41.322003" elapsed="0.000132"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.321985" elapsed="0.000170"/>
</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-10-06T01:27:41.323295" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:41.323210" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.323193" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:41.323745" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:41.323499" elapsed="0.000271"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:41.324108" 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-10-06T01:27:41.323930" elapsed="0.000202"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:41.356039" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:41.324732" elapsed="0.031501"/>
</kw>
<msg time="2026-10-06T01:27:41.356392" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:41.356433" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.324302" elapsed="0.032166"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:41.428109" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:41.357068" elapsed="0.071234"/>
</kw>
<msg time="2026-10-06T01:27:41.428459" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:41.428500" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.356632" elapsed="0.071903"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.428833" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:41.428607" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.428588" elapsed="0.000340"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:41.429501" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "n "e "r "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:41.429144" elapsed="0.000442"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.429865" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:41.429648" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.429631" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:41.429989" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:41.432480" elapsed="0.000501"/>
</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-10-06T01:27:41.434220" elapsed="0.000473"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:41.436073" elapsed="0.000322"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:41.430788" elapsed="0.005674"/>
</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-10-06T01:27:41.430271" elapsed="0.006308"/>
</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="PASS" start="2026-10-06T01:27:41.322936" elapsed="0.113720"/>
</kw>
<msg time="2026-10-06T01:27:41.436757" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:41.436796" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.322342" elapsed="0.114490"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:41.436985" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:41.436901" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.436884" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.437415" elapsed="0.000024"/>
</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-10-06T01:27:41.437809" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:41.437874" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:41.321710" elapsed="0.116249"/>
</kw>
<msg time="2026-10-06T01:27:41.438043" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:41.438083" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.319868" elapsed="0.118249"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.438416" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:41.438200" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.438183" elapsed="0.000304"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:41.319636" elapsed="0.118872"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:41.074702" elapsed="0.363831"/>
</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-10-06T01:27:41.072605" elapsed="0.365979"/>
</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-10-06T01:27:41.070668" elapsed="0.367967"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.070283" elapsed="0.368408"/>
</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-10-06T01:27:41.069270" elapsed="0.369474"/>
</kw>
<kw name="Create Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:27:41.442777" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Create bridge br01 in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:27:41.441582" elapsed="0.001229">Variable '${new_owner}' not found.</status>
</kw>
<doc>Create Bridge in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:27:41.068730" elapsed="0.374245">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t24" name="Create Port In Owner and Verify After Fail" line="123">
<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-10-06T01:27:41.444517" elapsed="0.000230"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:41.444271" elapsed="0.000528"/>
</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-10-06T01:27:41.445699" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:41.445598" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.445581" elapsed="0.000182"/>
</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-10-06T01:27:41.447620" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:41.447537" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.447520" elapsed="0.000178"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:41.448804" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:41.448266" elapsed="0.000565"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:41.449271" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:41.448981" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:41.449337" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:27:41.449463" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:41.447900" elapsed="0.001585"/>
</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-10-06T01:27:41.452002" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:41.451918" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.451901" elapsed="0.000163"/>
</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-10-06T01:27:41.453188" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:41.453090" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.453073" elapsed="0.000178"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:41.453617" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:41.453393" elapsed="0.000249"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:41.453997" 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-10-06T01:27:41.453820" elapsed="0.000201"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:41.486599" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:41.454625" elapsed="0.032168"/>
</kw>
<msg time="2026-10-06T01:27:41.486950" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:41.486991" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.454209" elapsed="0.032817"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:41.556878" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "a "n "[78Cd "[A[78C
 "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:41.487646" elapsed="0.069415"/>
</kw>
<msg time="2026-10-06T01:27:41.557235" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:41.557276" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.487225" elapsed="0.070086"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.557585" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:41.557381" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.557362" elapsed="0.000340"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:41.558241" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "a "n "[78Cd "[A[78C
 "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:41.557885" elapsed="0.000476"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.558623" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:41.558425" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.558408" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:41.558766" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:41.561236" elapsed="0.000485"/>
</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-10-06T01:27:41.562921" elapsed="0.000460"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:41.565439" elapsed="0.001232"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:41.559558" elapsed="0.007243"/>
</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-10-06T01:27:41.559031" elapsed="0.007902"/>
</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="PASS" start="2026-10-06T01:27:41.452832" elapsed="0.114224"/>
</kw>
<msg time="2026-10-06T01:27:41.567186" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:41.567235" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.452227" elapsed="0.115047"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:41.567510" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-10-06T01:27:41.567378" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.567349" elapsed="0.000266"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:41.568074" elapsed="0.000027"/>
</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-10-06T01:27:41.568424" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:41.568490" 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="PASS" start="2026-10-06T01:27:41.451615" elapsed="0.116966"/>
</kw>
<msg time="2026-10-06T01:27:41.568687" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:41.568733" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.449826" elapsed="0.118946"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.569095" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:41.568846" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.568830" elapsed="0.000354"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:41.449670" elapsed="0.119538"/>
</iter>
<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-10-06T01:27:41.572106" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:41.572014" elapsed="0.000134"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.571996" elapsed="0.000188"/>
</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-10-06T01:27:41.573294" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:41.573209" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.573192" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:41.573763" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:41.573502" elapsed="0.000286"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:41.574137" 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-10-06T01:27:41.573953" elapsed="0.000208"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:41.604614" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:41.574761" elapsed="0.030065"/>
</kw>
<msg time="2026-10-06T01:27:41.605099" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:41.605142" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.574330" elapsed="0.030864"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:41.672018" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "a "n "[78Cd "[A[78C
 "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:41.605808" elapsed="0.066402"/>
</kw>
<msg time="2026-10-06T01:27:41.672366" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:41.672408" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.605361" elapsed="0.067082"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.672742" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:41.672513" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.672495" elapsed="0.000342"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:41.673376" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "a "n "[78Cd "[A[78C
 "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:41.673017" elapsed="0.000443"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.673736" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:41.673521" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.673505" elapsed="0.000324"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:41.673860" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:41.676387" elapsed="0.000497"/>
</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-10-06T01:27:41.678099" elapsed="0.000483"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:41.679798" elapsed="0.000304"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:41.674715" elapsed="0.005467"/>
</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-10-06T01:27:41.674151" elapsed="0.006148"/>
</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="PASS" start="2026-10-06T01:27:41.572927" elapsed="0.107449"/>
</kw>
<msg time="2026-10-06T01:27:41.680457" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:41.680497" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.572333" elapsed="0.108198"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:41.680882" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:27:41.680599" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.680582" elapsed="0.000381"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.681294" elapsed="0.000024"/>
</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-10-06T01:27:41.681592" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:41.681655" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:41.571685" elapsed="0.110074"/>
</kw>
<msg time="2026-10-06T01:27:41.681857" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:41.681898" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.569485" elapsed="0.112448"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.682274" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:41.682038" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.682021" elapsed="0.000326"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:41.569337" elapsed="0.113032"/>
</iter>
<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-10-06T01:27:41.684990" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:41.684906" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.684888" elapsed="0.000164"/>
</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-10-06T01:27:41.686192" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:41.686095" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.686078" elapsed="0.000178"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:41.686619" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:41.686398" elapsed="0.000246"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:41.686998" 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-10-06T01:27:41.686821" elapsed="0.000201"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:41.719666" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:41.687604" elapsed="0.032256"/>
</kw>
<msg time="2026-10-06T01:27:41.720017" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:41.720058" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.687192" elapsed="0.032902"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:41.787783" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "a "n "[78Cd "[A[78C
 "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:41.720717" elapsed="0.067294"/>
</kw>
<msg time="2026-10-06T01:27:41.788233" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:41.788278" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.720271" elapsed="0.068042"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.788670" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:41.788409" elapsed="0.000362"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.788379" elapsed="0.000419"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:41.789394" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "a "n "[78Cd "[A[78C
 "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:41.788986" elapsed="0.000492"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.789757" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:41.789540" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.789523" elapsed="0.000329"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:41.789885" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:41.792478" elapsed="0.000531"/>
</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-10-06T01:27:41.794255" elapsed="0.000506"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:41.796094" elapsed="0.000341"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:41.790769" elapsed="0.005733"/>
</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-10-06T01:27:41.790210" elapsed="0.006407"/>
</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="PASS" start="2026-10-06T01:27:41.685837" elapsed="0.111100"/>
</kw>
<msg time="2026-10-06T01:27:41.797025" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:41.797065" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.685233" elapsed="0.111869"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:41.797305" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:41.797216" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.797155" elapsed="0.000230"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.797742" elapsed="0.000024"/>
</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-10-06T01:27:41.798049" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:41.798115" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:41.684599" elapsed="0.113617"/>
</kw>
<msg time="2026-10-06T01:27:41.798305" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:41.798346" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.682617" elapsed="0.115765"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.798735" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:41.798453" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.798437" elapsed="0.000374"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:41.682480" elapsed="0.116353"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:41.449531" elapsed="0.349335"/>
</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-10-06T01:27:41.447244" elapsed="0.351681"/>
</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-10-06T01:27:41.445346" elapsed="0.353637"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.444945" elapsed="0.354085"/>
</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-10-06T01:27:41.443922" elapsed="0.355162"/>
</kw>
<kw name="Create Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:27:41.803225" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Add Port vx2 to bridge br01 in controller ${controller_index} and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:27:41.802002" elapsed="0.001260">Variable '${new_owner}' not found.</status>
</kw>
<doc>Create Port in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:27:41.443435" elapsed="0.359981">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t25" name="Modify the destination IP of Port In Owner After Fail" line="127">
<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-10-06T01:27:41.804939" elapsed="0.000202"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:41.804568" elapsed="0.000640"/>
</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-10-06T01:27:41.806111" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:41.806026" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.806009" elapsed="0.000198"/>
</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-10-06T01:27:41.808134" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:41.808038" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.808021" elapsed="0.000204"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:41.809142" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:41.808809" elapsed="0.000376"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:41.809608" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:41.809336" elapsed="0.000297"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:41.809672" elapsed="0.000042"/>
</return>
<msg time="2026-10-06T01:27:41.809815" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:41.808435" elapsed="0.001437"/>
</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-10-06T01:27:41.812452" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:41.812368" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.812350" elapsed="0.000166"/>
</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-10-06T01:27:41.813655" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:41.813570" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.813553" elapsed="0.000192"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:41.814121" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:41.813889" elapsed="0.000258"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:41.814538" 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-10-06T01:27:41.814334" elapsed="0.000230"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:41.847602" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:41.815184" elapsed="0.032619"/>
</kw>
<msg time="2026-10-06T01:27:41.847964" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:41.848006" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.814741" elapsed="0.033300"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:41.959940" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:41.848663" elapsed="0.111486"/>
</kw>
<msg time="2026-10-06T01:27:41.960366" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:41.960408" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.848233" elapsed="0.112210"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.960779" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:41.960523" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.960501" elapsed="0.000377"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:41.961466" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:41.961064" elapsed="0.000492"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.961836" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:41.961618" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.961602" elapsed="0.000329"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:41.961962" elapsed="0.000030"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:41.964537" elapsed="0.000510"/>
</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-10-06T01:27:41.966303" elapsed="0.000496"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:41.968200" elapsed="0.000312"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:41.962815" elapsed="0.005763"/>
</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-10-06T01:27:41.962275" elapsed="0.006437"/>
</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="PASS" start="2026-10-06T01:27:41.813306" elapsed="0.155485"/>
</kw>
<msg time="2026-10-06T01:27:41.968921" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:41.968961" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.812662" elapsed="0.156336"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:41.969153" elapsed="0.000041"/>
</return>
<status status="PASS" start="2026-10-06T01:27:41.969069" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.969051" elapsed="0.000197"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:41.969578" elapsed="0.000024"/>
</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-10-06T01:27:41.969977" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:41.970043" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:41.812057" elapsed="0.158080"/>
</kw>
<msg time="2026-10-06T01:27:41.970238" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:41.970279" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.810237" elapsed="0.160078"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:41.970602" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:41.970385" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.970369" elapsed="0.000320"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:41.810081" elapsed="0.160631"/>
</iter>
<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-10-06T01:27:41.974962" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:41.974876" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.974858" elapsed="0.000166"/>
</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-10-06T01:27:41.976131" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:41.976047" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:41.976030" elapsed="0.000184"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:41.976633" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:41.976356" elapsed="0.000302"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:41.977021" 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-10-06T01:27:41.976839" elapsed="0.000206"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:42.009029" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:41.977624" elapsed="0.031596"/>
</kw>
<msg time="2026-10-06T01:27:42.009379" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:42.009420" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.977212" elapsed="0.032243"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:42.095486" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:42.010059" elapsed="0.085613"/>
</kw>
<msg time="2026-10-06T01:27:42.095854" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:42.095894" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.009618" elapsed="0.086311"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.096224" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:42.096003" elapsed="0.000329"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.095983" elapsed="0.000375"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:42.096902" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:42.096536" elapsed="0.000453"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.097263" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:42.097051" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.097034" elapsed="0.000323"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:42.097388" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:42.099909" elapsed="0.000490"/>
</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-10-06T01:27:42.101628" elapsed="0.000484"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:42.103352" elapsed="0.000314"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:42.098198" elapsed="0.005561"/>
</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-10-06T01:27:42.097663" elapsed="0.006214"/>
</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="PASS" start="2026-10-06T01:27:41.975789" elapsed="0.128165"/>
</kw>
<msg time="2026-10-06T01:27:42.104036" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:42.104075" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.975184" elapsed="0.128928"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:42.104284" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:42.104198" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.104180" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.104725" elapsed="0.000025"/>
</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-10-06T01:27:42.105029" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:42.105093" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:41.974560" elapsed="0.130635"/>
</kw>
<msg time="2026-10-06T01:27:42.105281" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:42.105322" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.970970" elapsed="0.134387"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.105644" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:42.105427" elapsed="0.000547"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.105411" elapsed="0.000586"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:41.970832" elapsed="0.135186"/>
</iter>
<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-10-06T01:27:42.108552" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:42.108467" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.108450" elapsed="0.000165"/>
</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-10-06T01:27:42.109739" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:42.109629" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.109612" elapsed="0.000190"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:42.110188" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:42.109944" elapsed="0.000269"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:42.110553" 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-10-06T01:27:42.110374" elapsed="0.000235"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:42.143035" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:42.111210" elapsed="0.032013"/>
</kw>
<msg time="2026-10-06T01:27:42.143380" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:42.143422" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.110784" elapsed="0.032673"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:42.223240" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:42.144062" elapsed="0.079366"/>
</kw>
<msg time="2026-10-06T01:27:42.223587" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:42.223628" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.143621" elapsed="0.080044"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.223969" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:42.223762" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.223742" elapsed="0.000321"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:42.224618" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:42.224278" elapsed="0.000447"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.224984" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:42.224787" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.224771" elapsed="0.000311"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:42.225113" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:42.227624" elapsed="0.000493"/>
</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-10-06T01:27:42.229366" elapsed="0.000482"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:42.231042" elapsed="0.000330"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:42.225923" elapsed="0.005515"/>
</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-10-06T01:27:42.225403" elapsed="0.006153"/>
</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="PASS" start="2026-10-06T01:27:42.109370" elapsed="0.122264"/>
</kw>
<msg time="2026-10-06T01:27:42.231984" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:42.232025" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.108779" elapsed="0.123282"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:42.232265" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:42.232132" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.232114" elapsed="0.000229"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.232663" elapsed="0.000041"/>
</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-10-06T01:27:42.232981" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:42.233046" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:42.108173" elapsed="0.125013"/>
</kw>
<msg time="2026-10-06T01:27:42.233276" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:42.233316" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.106284" elapsed="0.127067"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.233641" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:42.233421" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.233405" elapsed="0.000376"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:42.106133" elapsed="0.127670"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:41.809929" elapsed="0.423903"/>
</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-10-06T01:27:41.807742" elapsed="0.426147"/>
</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-10-06T01:27:41.805764" elapsed="0.428178"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:41.805354" elapsed="0.428631"/>
</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-10-06T01:27:41.804204" elapsed="0.429832"/>
</kw>
<kw name="Modify the destination IP of Sample Port" owner="ClusterOvsdb">
<msg time="2026-10-06T01:27:42.236915" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Modify the dst ip of port vx2 in bridge br01 in controller ${controller_index}.</doc>
<status status="FAIL" start="2026-10-06T01:27:42.235746" elapsed="0.001204">Variable '${new_owner}' not found.</status>
</kw>
<doc>Modify the dst ip of existing port in Owner.</doc>
<status status="FAIL" start="2026-10-06T01:27:41.803646" elapsed="0.433453">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t26" name="Verify Port Is Modified After Fail" line="131">
<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-10-06T01:27:42.238574" elapsed="0.000218"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:42.238329" elapsed="0.000514"/>
</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-10-06T01:27:42.239751" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:42.239647" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.239630" elapsed="0.000184"/>
</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-10-06T01:27:42.241707" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:42.241608" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.241591" elapsed="0.000179"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:42.242672" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:42.242347" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:42.243137" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:42.242867" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:42.243220" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:27:42.243347" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:42.241976" elapsed="0.001394"/>
</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-10-06T01:27:42.245914" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:42.245830" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.245812" elapsed="0.000165"/>
</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-10-06T01:27:42.247109" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:42.247025" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.247008" elapsed="0.000180"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:42.247558" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:42.247333" elapsed="0.000250"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:42.247943" 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-10-06T01:27:42.247764" elapsed="0.000203"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:42.285462" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:42.248583" elapsed="0.037056"/>
</kw>
<msg time="2026-10-06T01:27:42.285819" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:42.285861" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.248154" elapsed="0.037742"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:42.356477" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CA
 "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:42.286498" elapsed="0.070164"/>
</kw>
<msg time="2026-10-06T01:27:42.356852" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:42.356896" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.286061" elapsed="0.070870"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.357233" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:42.357005" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.356985" elapsed="0.000344"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:42.357878" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CA
 "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:42.357510" elapsed="0.000450"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.358245" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:42.358024" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.358007" elapsed="0.000332"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:42.358370" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:42.360918" elapsed="0.000547"/>
</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-10-06T01:27:42.362704" elapsed="0.000470"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:42.364524" elapsed="0.000322"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:42.359241" elapsed="0.005672"/>
</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-10-06T01:27:42.358638" elapsed="0.006393"/>
</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="PASS" start="2026-10-06T01:27:42.246766" elapsed="0.118343"/>
</kw>
<msg time="2026-10-06T01:27:42.365206" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:42.365247" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.246127" elapsed="0.119156"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:42.365440" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:42.365354" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.365336" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:42.365926" elapsed="0.000024"/>
</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-10-06T01:27:42.366244" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:42.366310" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:42.245526" elapsed="0.120870"/>
</kw>
<msg time="2026-10-06T01:27:42.366482" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:42.366556" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.243717" elapsed="0.122878"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.366901" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:42.366665" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.366648" elapsed="0.000326"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:42.243562" elapsed="0.123434"/>
</iter>
<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-10-06T01:27:42.369615" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:42.369528" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.369511" elapsed="0.000209"/>
</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-10-06T01:27:42.370841" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:42.370754" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.370737" elapsed="0.000167"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:42.371291" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:42.371048" elapsed="0.000268"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:42.371656" 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-10-06T01:27:42.371477" elapsed="0.000221"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:42.403633" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:42.372288" elapsed="0.031557"/>
</kw>
<msg time="2026-10-06T01:27:42.404006" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:42.404047" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.371854" elapsed="0.032229"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:42.471091" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CA
 "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:42.404716" elapsed="0.066571"/>
</kw>
<msg time="2026-10-06T01:27:42.471443" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:42.471484" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.404267" elapsed="0.067253"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.471827" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:42.471591" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.471573" elapsed="0.000349"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:42.472460" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CA
 "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:42.472106" elapsed="0.000435"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.472820" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:42.472603" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.472587" elapsed="0.000327"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:42.472945" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:42.475426" elapsed="0.000495"/>
</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-10-06T01:27:42.477197" elapsed="0.000460"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:42.479061" elapsed="0.000322"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:42.473765" elapsed="0.005685"/>
</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-10-06T01:27:42.473241" elapsed="0.006366"/>
</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="PASS" start="2026-10-06T01:27:42.370470" elapsed="0.109230"/>
</kw>
<msg time="2026-10-06T01:27:42.479785" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:42.479825" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.369872" elapsed="0.109989"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:42.480017" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:42.479931" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.479913" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.480430" elapsed="0.000024"/>
</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-10-06T01:27:42.480831" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:42.480897" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:42.369232" elapsed="0.111753"/>
</kw>
<msg time="2026-10-06T01:27:42.481073" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:42.481114" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.367279" elapsed="0.113871"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.481463" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:42.481242" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.481226" elapsed="0.000308"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:42.367106" elapsed="0.114449"/>
</iter>
<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-10-06T01:27:42.484137" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:42.484051" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.484033" elapsed="0.000183"/>
</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-10-06T01:27:42.485317" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:42.485232" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.485215" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:42.485766" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:42.485519" elapsed="0.000272"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:42.486128" 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-10-06T01:27:42.485951" elapsed="0.000201"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:42.518473" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:42.486750" elapsed="0.031942"/>
</kw>
<msg time="2026-10-06T01:27:42.518853" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:42.518895" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.486322" elapsed="0.032608"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:42.595412" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CA
 "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:42.519544" elapsed="0.076047"/>
</kw>
<msg time="2026-10-06T01:27:42.595773" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:42.595815" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.519093" elapsed="0.076758"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.596181" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:42.595960" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.595941" elapsed="0.000337"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:42.596819" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CA
 "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:42.596461" elapsed="0.000440"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.597178" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:42.596962" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.596946" elapsed="0.000326"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:42.597303" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:42.599777" elapsed="0.000485"/>
</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-10-06T01:27:42.601470" elapsed="0.000468"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:42.603298" elapsed="0.000324"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:42.598081" elapsed="0.005624"/>
</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-10-06T01:27:42.597568" elapsed="0.006253"/>
</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="PASS" start="2026-10-06T01:27:42.484958" elapsed="0.118940"/>
</kw>
<msg time="2026-10-06T01:27:42.603978" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:42.604018" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.484367" elapsed="0.119687"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:42.604224" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:27:42.604123" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.604105" elapsed="0.000197"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.604630" elapsed="0.000024"/>
</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-10-06T01:27:42.605029" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:42.605094" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:42.483757" elapsed="0.121438"/>
</kw>
<msg time="2026-10-06T01:27:42.605280" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:42.605320" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.481819" elapsed="0.123536"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.605641" elapsed="0.000018"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:42.605423" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.605407" elapsed="0.000322"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:42.481664" elapsed="0.124087"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:42.243420" elapsed="0.362358"/>
</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-10-06T01:27:42.241314" elapsed="0.364519"/>
</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-10-06T01:27:42.239391" elapsed="0.366497"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.238986" elapsed="0.366946"/>
</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-10-06T01:27:42.237969" elapsed="0.368047"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<msg time="2026-10-06T01:27:42.608933" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>${new_cluster_list}</arg>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:27:42.607647" elapsed="0.001321">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Verify port is modified in all instances.</doc>
<status status="FAIL" start="2026-10-06T01:27:42.237465" elapsed="0.371637">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s2-s1-t27" name="Start Old Owner Instance" line="135">
<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-10-06T01:27:42.610535" elapsed="0.000214"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:42.610287" elapsed="0.000514"/>
</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-10-06T01:27:42.611708" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:42.611604" elapsed="0.000147"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.611587" elapsed="0.000184"/>
</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-10-06T01:27:42.613632" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:42.613548" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.613532" elapsed="0.000178"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:42.614611" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:42.614285" elapsed="0.000351"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:42.615069" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:42.614801" elapsed="0.000292"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:42.615132" elapsed="0.000040"/>
</return>
<msg time="2026-10-06T01:27:42.615273" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:42.613914" elapsed="0.001382"/>
</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-10-06T01:27:42.617825" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:42.617741" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.617723" elapsed="0.000165"/>
</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-10-06T01:27:42.618993" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:42.618909" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.618892" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:42.619437" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:42.619213" elapsed="0.000248"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:42.619817" 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-10-06T01:27:42.619623" elapsed="0.000219"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:42.654300" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:42.620447" elapsed="0.034030"/>
</kw>
<msg time="2026-10-06T01:27:42.654635" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:42.654696" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.619993" elapsed="0.034741"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:42.715605" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "t "a "r "t "[C "O "l "d "[C "O "w "n "e "r "[C "I "n "s "t "a "n "c "[78Ce "[A[78C"[K
[K
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:42.655338" elapsed="0.060462"/>
</kw>
<msg time="2026-10-06T01:27:42.715957" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:42.715998" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.654897" elapsed="0.061136"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.716321" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:42.716103" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.716085" elapsed="0.000370"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:42.716992" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "t "a "r "t "[C "O "l "d "[C "O "w "n "e "r "[C "I "n "s "t "a "n "c "[78Ce "[A[78C"[K
[K
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:42.716636" elapsed="0.000439"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.717366" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:42.717139" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.717123" elapsed="0.000337"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:42.717491" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:42.719977" elapsed="0.000496"/>
</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-10-06T01:27:42.721737" elapsed="0.000470"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:42.723413" elapsed="0.000337"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:42.718285" elapsed="0.005532"/>
</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-10-06T01:27:42.717780" elapsed="0.006157"/>
</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="PASS" start="2026-10-06T01:27:42.618625" elapsed="0.105388"/>
</kw>
<msg time="2026-10-06T01:27:42.724095" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:42.724134" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.618035" elapsed="0.106150"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:42.724342" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:42.724256" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.724238" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:42.725034" elapsed="0.000025"/>
</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-10-06T01:27:42.725381" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:42.725447" 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="PASS" start="2026-10-06T01:27:42.617434" elapsed="0.108100"/>
</kw>
<msg time="2026-10-06T01:27:42.725617" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:42.725657" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.615621" elapsed="0.110090"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.726000" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:42.725780" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.725764" elapsed="0.000307"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:42.615484" elapsed="0.110608"/>
</iter>
<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-10-06T01:27:42.728615" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:42.728531" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.728514" elapsed="0.000178"/>
</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-10-06T01:27:42.729798" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:42.729711" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.729672" elapsed="0.000190"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:42.730267" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:42.730005" elapsed="0.000287"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:42.730668" 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-10-06T01:27:42.730486" elapsed="0.000223"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:42.764767" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:42.731294" elapsed="0.033649"/>
</kw>
<msg time="2026-10-06T01:27:42.765118" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:42.765178" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.730865" elapsed="0.034350"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:42.825823" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "t "a "r "t "[C "O "l "d "[C "O "w "n "e "r "[C "I "n "s "t "a "n "c "[78Ce "[A[78C"[K
[K
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:42.765821" elapsed="0.060181"/>
</kw>
<msg time="2026-10-06T01:27:42.826180" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:42.826224" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.765382" elapsed="0.060879"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.826543" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:42.826334" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.826315" elapsed="0.000324"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:42.827228" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "t "a "r "t "[C "O "l "d "[C "O "w "n "e "r "[C "I "n "s "t "a "n "c "[78Ce "[A[78C"[K
[K
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:42.826862" elapsed="0.000443"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.827566" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:42.827368" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.827351" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:42.827708" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:42.830208" elapsed="0.000500"/>
</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-10-06T01:27:42.831968" elapsed="0.000471"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:42.833621" elapsed="0.000333"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:42.828488" elapsed="0.005531"/>
</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-10-06T01:27:42.827977" elapsed="0.006160"/>
</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="PASS" start="2026-10-06T01:27:42.729428" elapsed="0.104803"/>
</kw>
<msg time="2026-10-06T01:27:42.834313" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:42.834353" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.728841" elapsed="0.105549"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:42.834543" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:42.834459" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.834442" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.835252" elapsed="0.000025"/>
</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-10-06T01:27:42.835551" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:42.835616" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:42.728238" elapsed="0.107480"/>
</kw>
<msg time="2026-10-06T01:27:42.835841" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:42.835881" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.726354" elapsed="0.109563"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.836251" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:42.835985" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.835969" elapsed="0.000355"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:42.726217" elapsed="0.110129"/>
</iter>
<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-10-06T01:27:42.838891" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:42.838793" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.838770" elapsed="0.000185"/>
</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-10-06T01:27:42.840067" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:42.839983" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.839966" elapsed="0.000170"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:42.840540" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:42.840313" elapsed="0.000252"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:42.840922" 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-10-06T01:27:42.840742" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:42.875310" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:42.841531" elapsed="0.033955"/>
</kw>
<msg time="2026-10-06T01:27:42.875711" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:42.875755" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.841097" elapsed="0.034693"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:42.936296" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "t "a "r "t "[C "O "l "d "[C "O "w "n "e "r "[C "I "n "s "t "a "n "c "[78Ce "[A[78C"[K
[K
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:42.876399" elapsed="0.060069"/>
</kw>
<msg time="2026-10-06T01:27:42.936626" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:42.936667" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.875956" elapsed="0.060771"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.937003" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:42.936799" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.936781" elapsed="0.000316"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:42.937656" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "t "a "r "t "[C "O "l "d "[C "O "w "n "e "r "[C "I "n "s "t "a "n "c "[78Ce "[A[78C"[K
[K
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:42.937320" elapsed="0.000431"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.938010" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:42.937813" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.937797" elapsed="0.000307"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:42.938135" elapsed="0.000044"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:42.940636" elapsed="0.000497"/>
</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-10-06T01:27:42.942366" elapsed="0.000469"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:42.944254" elapsed="0.000303"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:42.938935" elapsed="0.005688"/>
</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-10-06T01:27:42.938420" elapsed="0.006341"/>
</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="PASS" start="2026-10-06T01:27:42.839724" elapsed="0.105114"/>
</kw>
<msg time="2026-10-06T01:27:42.944920" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:42.944960" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.839106" elapsed="0.105890"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:42.945165" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:27:42.945066" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.945049" elapsed="0.000195"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.945560" elapsed="0.000023"/>
</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-10-06T01:27:42.945947" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:42.946013" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:42.838470" elapsed="0.107628"/>
</kw>
<msg time="2026-10-06T01:27:42.946198" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:42.946240" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.836592" elapsed="0.109684"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:42.946561" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:42.946345" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.946329" elapsed="0.000303"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:42.836455" elapsed="0.110198"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:42.615344" elapsed="0.331351"/>
</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-10-06T01:27:42.613256" elapsed="0.333492"/>
</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-10-06T01:27:42.611350" elapsed="0.335450"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.610946" elapsed="0.335895"/>
</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-10-06T01:27:42.609931" elapsed="0.336958"/>
</kw>
<kw name="Start_Single_Member" owner="ClusterManagement">
<msg time="2026-10-06T01:27:42.948601" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Convenience keyword that starts the specified member of the cluster.</doc>
<status status="FAIL" start="2026-10-06T01:27:42.947093" elapsed="0.001543">Variable '${original_owner}' not found.</status>
</kw>
<doc>Start Owner Instance and verify it is active</doc>
<status status="FAIL" start="2026-10-06T01:27:42.609452" elapsed="0.339331">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t28" name="Check Shards Status After Recover" line="139">
<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-10-06T01:27:42.950247" elapsed="0.000201"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:27:42.949948" elapsed="0.000549"/>
</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-10-06T01:27:42.951457" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:42.951370" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.951353" elapsed="0.000166"/>
</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-10-06T01:27:42.953416" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:42.953331" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.953314" elapsed="0.000165"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:27:42.954395" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:27:42.954053" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:27:42.954967" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:27:42.954645" elapsed="0.000346"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:27:42.955032" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:27:42.955175" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:27:42.953697" elapsed="0.001502"/>
</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-10-06T01:27:42.957717" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:42.957616" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.957598" elapsed="0.000182"/>
</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-10-06T01:27:42.958880" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:42.958796" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:42.958779" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:42.959326" level="INFO">${karaf_connection_index} = 388</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-10-06T01:27:42.959085" elapsed="0.000265"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:42.959868" 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-10-06T01:27:42.959511" elapsed="0.000382"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:42.993447" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:42.960507" elapsed="0.033117"/>
</kw>
<msg time="2026-10-06T01:27:42.993804" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:42.993845" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.960046" elapsed="0.033834"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:43.065091" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "A "f "t "[78Ce "[A[78Cr
 "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:42.994500" elapsed="0.070791"/>
</kw>
<msg time="2026-10-06T01:27:43.065456" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:43.065498" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.994042" elapsed="0.071491"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:43.065841" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:43.065605" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:43.065587" elapsed="0.000351"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:43.066477" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "A "f "t "[78Ce "[A[78Cr
 "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:43.066115" elapsed="0.000444"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:43.066841" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:43.066622" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:43.066604" elapsed="0.000330"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:43.066964" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:43.069447" elapsed="0.000507"/>
</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-10-06T01:27:43.071207" elapsed="0.000459"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:43.072966" elapsed="0.000331"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:43.067762" elapsed="0.005601"/>
</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-10-06T01:27:43.067243" elapsed="0.006273"/>
</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="PASS" start="2026-10-06T01:27:42.958514" elapsed="0.115082"/>
</kw>
<msg time="2026-10-06T01:27:43.073877" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:43.073921" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.957925" elapsed="0.116034"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:43.074117" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:43.074031" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:43.074013" elapsed="0.000231"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:27:43.074563" elapsed="0.000023"/>
</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-10-06T01:27:43.074880" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:43.074945" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:27:42.957326" elapsed="0.117703"/>
</kw>
<msg time="2026-10-06T01:27:43.075114" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:43.075166" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.955522" elapsed="0.119681"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:43.075488" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:43.075272" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:43.075256" elapsed="0.000303"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:27:42.955385" elapsed="0.120195"/>
</iter>
<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-10-06T01:27:43.079418" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:43.079333" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:43.079315" elapsed="0.000165"/>
</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-10-06T01:27:43.080590" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:43.080505" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:43.080489" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:43.081046" level="INFO">${karaf_connection_index} = 390</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-10-06T01:27:43.080820" elapsed="0.000251"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:43.081428" 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-10-06T01:27:43.081247" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:43.116636" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:43.082036" elapsed="0.034815"/>
</kw>
<msg time="2026-10-06T01:27:43.117009" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:43.117051" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:43.081603" elapsed="0.035484"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:43.181528" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "A "f "t "[78Ce "[A[78Cr
 "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:43.117712" elapsed="0.064017"/>
</kw>
<msg time="2026-10-06T01:27:43.181891" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:43.181933" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:43.117269" elapsed="0.064699"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:43.182321" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:43.182076" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:43.182057" elapsed="0.000361"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:43.182948" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "A "f "t "[78Ce "[A[78Cr
 "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:43.182595" elapsed="0.000434"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:43.183301" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:43.183090" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:43.183074" elapsed="0.000321"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:43.183425" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:43.185903" elapsed="0.000492"/>
</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-10-06T01:27:43.187619" elapsed="0.000483"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:43.189479" elapsed="0.000327"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:43.184221" elapsed="0.005651"/>
</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-10-06T01:27:43.183711" elapsed="0.006278"/>
</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="PASS" start="2026-10-06T01:27:43.080247" elapsed="0.109819"/>
</kw>
<msg time="2026-10-06T01:27:43.190166" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:43.190207" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:43.079629" elapsed="0.110614"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:43.190398" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:43.190314" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:43.190296" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:43.190875" elapsed="0.000027"/>
</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-10-06T01:27:43.191313" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:43.191380" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:27:43.079022" elapsed="0.112443"/>
</kw>
<msg time="2026-10-06T01:27:43.191549" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:43.191588" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:43.075957" elapsed="0.115666"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:43.191925" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:43.191708" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:43.191690" elapsed="0.000305"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:27:43.075820" elapsed="0.116196"/>
</iter>
<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-10-06T01:27:43.194596" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:43.194511" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:43.194493" elapsed="0.000166"/>
</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-10-06T01:27:43.195805" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:27:43.195719" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:43.195700" elapsed="0.000168"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:27:43.196250" level="INFO">${karaf_connection_index} = 392</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-10-06T01:27:43.196011" elapsed="0.000294"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:27:43.196647" 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-10-06T01:27:43.196469" elapsed="0.000202"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:27:43.228367" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:27:43.197275" elapsed="0.031297"/>
</kw>
<msg time="2026-10-06T01:27:43.228757" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:27:43.228800" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:43.196843" elapsed="0.031992"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:27:43.289322" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "A "f "t "[78Ce "[A[78Cr
 "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:27:43.229447" elapsed="0.060050"/>
</kw>
<msg time="2026-10-06T01:27:43.289655" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:27:43.289719" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:43.229003" elapsed="0.060753"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:43.290032" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:43.289827" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:43.289809" elapsed="0.000317"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:27:43.290671" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[C "A "f "t "[78Ce "[A[78Cr
 "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:27:43.290331" elapsed="0.000438"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:43.291028" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:43.290830" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:43.290814" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:27:43.291167" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:27:43.293638" elapsed="0.000496"/>
</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-10-06T01:27:43.295357" elapsed="0.000475"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:27:43.297230" elapsed="0.000303"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:27:43.291956" elapsed="0.005642"/>
</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-10-06T01:27:43.291435" elapsed="0.006296"/>
</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="PASS" start="2026-10-06T01:27:43.195438" elapsed="0.102371"/>
</kw>
<msg time="2026-10-06T01:27:43.297891" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:43.297931" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:43.194833" elapsed="0.103133"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:27:43.298120" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:27:43.298035" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:43.298018" elapsed="0.000195"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:43.298531" elapsed="0.000024"/>
</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-10-06T01:27:43.298925" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:27:43.299028" 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="PASS" start="2026-10-06T01:27:43.194221" elapsed="0.104897"/>
</kw>
<msg time="2026-10-06T01:27:43.299222" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:27:43.299262" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:43.192278" elapsed="0.107019"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:43.299588" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:27:43.299367" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:27:43.299350" elapsed="0.000310"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:27:43.192124" elapsed="0.107575"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:27:42.955246" elapsed="0.344481"/>
</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-10-06T01:27:42.953019" elapsed="0.346760"/>
</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-10-06T01:27:42.951067" elapsed="0.348763"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:27:42.950641" elapsed="0.349230"/>
</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-10-06T01:27:42.949596" elapsed="0.350325"/>
</kw>
<kw name="Check Ovsdb Shards Status After Cluster Event" owner="ClusterOvsdb">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:27:43.308537" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:27:43.308313" elapsed="0.000257">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:43.307904" elapsed="0.000791">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:27:43.308745" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:27:43.305043" elapsed="0.003745"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:43.304666" elapsed="0.004206">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:43.309086" elapsed="0.000020"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:43.309321" elapsed="0.000023"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:43.309536" elapsed="0.000021"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:27:43.301010" elapsed="0.008630">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:27:44.327333" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:27:44.326808" elapsed="0.000607">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:44.325868" elapsed="0.001793">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:27:44.327807" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:27:44.319332" elapsed="0.008578"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:44.318462" elapsed="0.009777">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:44.328786" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:44.329303" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:44.329812" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:27:44.310430" elapsed="0.019619">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:27:45.348972" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:27:45.348416" elapsed="0.000644">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:45.347435" elapsed="0.001908">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:27:45.349460" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:27:45.340778" elapsed="0.008784"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:45.339765" elapsed="0.010024">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:45.350331" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:45.350854" elapsed="0.000053"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:45.351350" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:27:45.330959" elapsed="0.020625">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:27:46.369644" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:27:46.369109" elapsed="0.000652">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:46.368191" elapsed="0.001835">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:27:46.370159" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:27:46.361400" elapsed="0.008861"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:46.360514" elapsed="0.009936">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:46.370999" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:46.371514" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:46.372025" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:27:46.352439" elapsed="0.020071">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:27:47.391581" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:27:47.391055" elapsed="0.000610">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:47.390107" elapsed="0.001846">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:27:47.392067" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:27:47.383292" elapsed="0.008898"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:47.382406" elapsed="0.009977">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:47.392922" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:47.393434" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:47.393946" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:27:47.373374" elapsed="0.020831">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:27:48.412343" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:27:48.411815" elapsed="0.000612">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:48.410875" elapsed="0.001839">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:27:48.412831" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:27:48.404324" elapsed="0.008608"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:48.403312" elapsed="0.009833">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:48.413657" elapsed="0.000078"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:48.414199" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:48.414670" elapsed="0.000079"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:27:48.395154" elapsed="0.019780">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:27:49.433340" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:27:49.432814" elapsed="0.000608">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:49.431865" elapsed="0.001794">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:27:49.433929" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:27:49.425208" elapsed="0.008860"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:49.424326" elapsed="0.010011">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:49.434894" elapsed="0.000054"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:49.435402" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:49.435910" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:27:49.415793" elapsed="0.020376">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:27:50.456906" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:27:50.456290" elapsed="0.000712">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:50.455079" elapsed="0.002215">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:27:50.457412" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:27:50.446865" elapsed="0.010653"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:50.445973" elapsed="0.011859">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:50.458479" elapsed="0.000055"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:50.459130" elapsed="0.000075"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:50.459750" elapsed="0.000060"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:27:50.437059" elapsed="0.022947">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:27:51.478497" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:27:51.477974" elapsed="0.000603">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:51.477002" elapsed="0.001851">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:27:51.478965" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:27:51.470369" elapsed="0.008694"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:51.469484" elapsed="0.009790">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:51.479803" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:51.480314" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:51.480940" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:27:51.460859" elapsed="0.020341">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:27:52.499327" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:27:52.498779" elapsed="0.000633">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:52.497814" elapsed="0.001850">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:27:52.499835" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:27:52.491025" elapsed="0.008915"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:52.490136" elapsed="0.010016">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:52.500662" elapsed="0.000076"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:52.501435" elapsed="0.000053"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:52.501953" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:27:52.482019" elapsed="0.020200">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:27:53.521319" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:27:53.520791" elapsed="0.000607">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:53.519669" elapsed="0.001969">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:27:53.521781" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:27:53.512806" elapsed="0.009073"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:53.511927" elapsed="0.010164">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:53.522585" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:53.523123" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:53.523594" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:27:53.502992" elapsed="0.020867">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:27:54.541419" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:27:54.540895" elapsed="0.000605">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:54.539968" elapsed="0.001915">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:27:54.541996" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:27:54.533500" elapsed="0.008618"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:54.532619" elapsed="0.009691">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:54.542835" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:54.543340" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:54.543850" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:27:54.524617" elapsed="0.019488">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:27:55.562156" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:27:55.561604" elapsed="0.000633">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:55.560659" elapsed="0.001809">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:27:55.562577" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:27:55.554176" elapsed="0.008497"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:55.553309" elapsed="0.009591">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:55.563410" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:55.563921" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:55.564423" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:27:55.544849" elapsed="0.019807">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:27:56.582251" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:27:56.581726" elapsed="0.000606">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:56.580793" elapsed="0.001775">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:27:56.582706" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:27:56.574307" elapsed="0.008506"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:56.573444" elapsed="0.009559">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:56.583631" elapsed="0.000076"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:56.584177" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:56.584656" elapsed="0.000078"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:27:56.565502" elapsed="0.019422">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:27:57.602855" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:27:57.602333" elapsed="0.000602">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:57.601393" elapsed="0.001799">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:27:57.603301" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:27:57.594848" elapsed="0.008548"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:57.593975" elapsed="0.009612">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:57.604122" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:57.604598" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:57.605118" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:27:57.585604" elapsed="0.019744">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:27:58.622909" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:27:58.622384" elapsed="0.000606">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:58.621462" elapsed="0.001788">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:27:58.623359" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:27:58.614961" elapsed="0.008494"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:58.614125" elapsed="0.009514">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:58.624272" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:58.624820" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:58.625317" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:27:58.606104" elapsed="0.019446">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:27:59.644410" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:27:59.643886" elapsed="0.000604">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:59.642962" elapsed="0.001797">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:27:59.644868" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:27:59.636101" elapsed="0.008862"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:27:59.635163" elapsed="0.010017">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:59.645736" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:59.646239" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:27:59.646730" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:27:59.626489" elapsed="0.020472">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:00.665282" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:00.664745" elapsed="0.000616">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:00.663530" elapsed="0.002069">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:00.665733" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:00.656667" elapsed="0.009172"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:00.655776" elapsed="0.010274">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:00.666550" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:00.667094" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:00.667576" elapsed="0.000057"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:00.647813" elapsed="0.020059">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:01.685927" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:01.685393" elapsed="0.000638">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:01.684448" elapsed="0.001821">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:01.686377" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:01.677956" elapsed="0.008518"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:01.677100" elapsed="0.009695">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:01.687331" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:01.687847" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:01.688455" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:01.668664" elapsed="0.020056">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:02.706484" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:02.705957" elapsed="0.000607">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:02.705037" elapsed="0.001797">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:02.706947" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:02.698461" elapsed="0.008607"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:02.697596" elapsed="0.009664">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:02.707785" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:02.708297" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:02.708799" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:02.689548" elapsed="0.019510">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:03.729507" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:03.729003" elapsed="0.000584">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:03.727951" elapsed="0.001902">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:03.729982" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:03.721471" elapsed="0.008614"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:03.720586" elapsed="0.009690">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:03.730853" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:03.731362" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:03.731880" elapsed="0.000177"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:03.709847" elapsed="0.022409">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:04.750076" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:04.749522" elapsed="0.000636">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:04.748581" elapsed="0.001810">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:04.750499" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:04.741796" elapsed="0.008801"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:04.740936" elapsed="0.009883">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:04.751338" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:04.751846" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:04.752341" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:04.733018" elapsed="0.019555">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:05.770556" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:05.770062" elapsed="0.000573">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:05.769133" elapsed="0.001771">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:05.771034" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:05.762577" elapsed="0.008555"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:05.761734" elapsed="0.009587">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:05.771841" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:05.772344" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:05.772840" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:05.753300" elapsed="0.019794">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:06.790462" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:06.789967" elapsed="0.000574">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:06.789046" elapsed="0.001865">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:06.791047" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:06.782569" elapsed="0.008577"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:06.781736" elapsed="0.009607">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:06.791875" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:06.792385" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:06.792884" elapsed="0.000067"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:06.773846" elapsed="0.019297">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:07.810646" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:07.810162" elapsed="0.000590">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:07.809222" elapsed="0.001782">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:07.811110" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:07.802800" elapsed="0.008403"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:07.801967" elapsed="0.009424">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:07.811901" elapsed="0.000065"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:07.812392" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:07.812888" elapsed="0.000071"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:07.793800" elapsed="0.019344">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:08.830298" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:08.829787" elapsed="0.000584">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:08.828853" elapsed="0.001738">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:08.830724" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:08.822421" elapsed="0.008401"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:08.821572" elapsed="0.009458">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:08.831511" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:08.832118" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:08.832592" elapsed="0.000046"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:08.813795" elapsed="0.019060">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:09.851004" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:09.850434" elapsed="0.000653">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:09.849501" elapsed="0.001830">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:09.851447" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:09.842599" elapsed="0.008949"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:09.841711" elapsed="0.010074">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:09.852327" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:09.852865" elapsed="0.000073"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:09.853361" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:09.833479" elapsed="0.020110">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:10.871094" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:10.870540" elapsed="0.000728">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:10.869607" elapsed="0.001899">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:10.871610" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:10.862972" elapsed="0.008767"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:10.862117" elapsed="0.009843">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:10.872449" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:10.872986" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:10.873457" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:10.854240" elapsed="0.019475">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:11.891856" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:11.891332" elapsed="0.000625">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:11.890390" elapsed="0.001798">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:11.892294" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:11.883931" elapsed="0.008459"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:11.882962" elapsed="0.009619">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:11.893123" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:11.893602" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:11.894133" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:11.874343" elapsed="0.020026">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:12.911620" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:12.911134" elapsed="0.000594">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:12.910196" elapsed="0.001787">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:12.912091" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:12.903715" elapsed="0.008471"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:12.902868" elapsed="0.009506">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:12.912907" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:12.913384" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:12.913945" elapsed="0.000051"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:12.895083" elapsed="0.019100">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:13.932416" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:13.931915" elapsed="0.000579">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:13.930976" elapsed="0.001786">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:13.932892" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:13.924467" elapsed="0.008524"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:13.923597" elapsed="0.009685">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:13.933803" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:13.934312" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:13.934820" elapsed="0.000071"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:13.915022" elapsed="0.020060">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:14.952808" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:14.952275" elapsed="0.000637">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:14.951343" elapsed="0.001808">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:14.953261" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:14.944850" elapsed="0.008508"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:14.944000" elapsed="0.009549">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:14.954088" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:14.954572" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:14.955099" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:14.935982" elapsed="0.019353">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:15.973755" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:15.973226" elapsed="0.000611">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:15.972284" elapsed="0.001813">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:15.974206" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:15.965734" elapsed="0.008567"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:15.964875" elapsed="0.009611">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:15.975026" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:15.975505" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:15.976083" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:15.956163" elapsed="0.020258">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:16.994204" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:16.993648" elapsed="0.000636">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:16.992729" elapsed="0.001791">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:16.994631" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:16.986103" elapsed="0.008655"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:16.985242" elapsed="0.009732">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:16.995469" elapsed="0.000045"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:16.996005" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:16.996480" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:16.977196" elapsed="0.019548">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:18.015288" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:18.014774" elapsed="0.000595">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:18.013857" elapsed="0.001750">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:18.015747" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:18.007166" elapsed="0.008705"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:18.006252" elapsed="0.009816">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:18.016560" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:18.017095" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:18.017572" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:17.997480" elapsed="0.020378">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:19.035109" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:19.034556" elapsed="0.000629">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:19.033629" elapsed="0.001779">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:19.035604" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:19.027174" elapsed="0.008560"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:19.026287" elapsed="0.009669">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:19.036435" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:19.036962" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:19.037436" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:19.018484" elapsed="0.019182">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:20.055256" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:20.054755" elapsed="0.000576">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:20.053848" elapsed="0.001706">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:20.055655" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:20.047318" elapsed="0.008464"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:20.046472" elapsed="0.009519">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:20.056461" elapsed="0.000044"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:20.056980" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:20.057448" elapsed="0.000046"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:20.038310" elapsed="0.019395">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:21.075289" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:21.074753" elapsed="0.000619">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:21.073827" elapsed="0.001786">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:21.075754" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:21.067296" elapsed="0.008583"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:21.066410" elapsed="0.009664">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:21.076574" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:21.077122" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:21.077755" elapsed="0.000079"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:21.058467" elapsed="0.019562">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:22.095582" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:22.095098" elapsed="0.000559">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:22.094170" elapsed="0.001762">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:22.096039" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:22.087758" elapsed="0.008375"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:22.086924" elapsed="0.009397">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:22.096844" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:22.097321" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:22.097836" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:22.078651" elapsed="0.019420">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:23.115407" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:23.114917" elapsed="0.000566">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:23.113904" elapsed="0.001853">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:23.115895" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:23.107475" elapsed="0.008517"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:23.106628" elapsed="0.009552">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:23.116657" elapsed="0.000076"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:23.117181" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:23.117650" elapsed="0.000078"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:23.098725" elapsed="0.019213">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:24.135747" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:24.135234" elapsed="0.000614">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:24.134310" elapsed="0.001860">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:24.136277" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:24.127650" elapsed="0.008721"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:24.126847" elapsed="0.009708">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:24.137087" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:24.137564" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:24.138089" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:24.118575" elapsed="0.019746">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:25.155493" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:25.155006" elapsed="0.000565">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:25.154051" elapsed="0.001798">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:25.155958" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:25.147548" elapsed="0.008505"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:25.146725" elapsed="0.009533">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:25.156782" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:25.157257" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:25.157772" elapsed="0.000051"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:25.139003" elapsed="0.019004">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:26.175733" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:26.175221" elapsed="0.000611">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:26.174293" elapsed="0.001767">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:26.176164" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:26.167869" elapsed="0.008389"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:26.167012" elapsed="0.009432">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:26.177045" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:26.177524" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:26.178058" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:26.158636" elapsed="0.019655">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:27.195588" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:27.194999" elapsed="0.000712">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:27.193993" elapsed="0.002030">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:27.196202" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:27.187575" elapsed="0.008736"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:27.186772" elapsed="0.009734">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:27.197071" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:27.197559" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:27.198125" elapsed="0.000052"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:27.178994" elapsed="0.019374">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:28.218884" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:28.218342" elapsed="0.000621">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:28.217279" elapsed="0.001913">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:28.219302" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:28.210776" elapsed="0.008620"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:28.209920" elapsed="0.009664">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:28.220113" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:28.220588" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:28.221202" elapsed="0.000054"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:28.199078" elapsed="0.022364">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:29.238806" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:29.238275" elapsed="0.000609">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:29.237337" elapsed="0.001773">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:29.239214" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:29.230947" elapsed="0.008363"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:29.230107" elapsed="0.009393">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:29.240026" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:29.240499" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:29.241031" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:29.222177" elapsed="0.019281">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:30.259334" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:30.258838" elapsed="0.000573">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:30.257902" elapsed="0.001738">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:30.259795" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:30.251428" elapsed="0.008467"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:30.250579" elapsed="0.009508">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:30.260575" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:30.261105" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:30.261572" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:30.242166" elapsed="0.019684">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:31.279464" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:31.278963" elapsed="0.000583">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:31.278020" elapsed="0.001815">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:31.279946" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:31.271433" elapsed="0.008612"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:31.270566" elapsed="0.009777">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:31.280896" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:31.281378" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:31.281906" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:31.262616" elapsed="0.019524">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:32.299534" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:32.299051" elapsed="0.000558">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:32.298110" elapsed="0.001767">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:32.299984" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:32.291769" elapsed="0.008309"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:32.290922" elapsed="0.009342">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:32.300783" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:32.301257" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:32.301767" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:32.282815" elapsed="0.019183">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:33.319157" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:33.318623" elapsed="0.000609">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:33.317741" elapsed="0.001712">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:33.319556" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:33.311239" elapsed="0.008410"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:33.310382" elapsed="0.009507">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:33.320370" elapsed="0.000045"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:33.320886" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:33.321357" elapsed="0.000133"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:33.302611" elapsed="0.019114">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:34.339633" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:34.339141" elapsed="0.000619">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:34.338175" elapsed="0.001817">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:34.340098" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:34.331652" elapsed="0.008542"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:34.330838" elapsed="0.009547">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:34.340910" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:34.341397" elapsed="0.000057"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:34.341946" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:34.322342" elapsed="0.019840">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:35.360553" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:35.359782" elapsed="0.000852">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:35.358604" elapsed="0.002350">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:35.361063" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:35.352050" elapsed="0.009110"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:35.351165" elapsed="0.010187">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:35.361881" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:35.362357" elapsed="0.000053"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:35.362877" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:35.342880" elapsed="0.020231">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:36.381087" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:36.380544" elapsed="0.000621">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:36.379615" elapsed="0.001865">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:36.381589" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:36.373160" elapsed="0.008574"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:36.372294" elapsed="0.009634">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:36.382414" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:36.382943" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:36.383415" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:36.363767" elapsed="0.019898">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:37.401365" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:37.400874" elapsed="0.000566">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:37.399938" elapsed="0.001782">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:37.401830" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:37.393161" elapsed="0.008764"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:37.392241" elapsed="0.009872">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:37.402588" elapsed="0.000065"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:37.403104" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:37.403567" elapsed="0.000046"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:37.384344" elapsed="0.019506">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:38.421348" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:38.420859" elapsed="0.000563">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:38.419926" elapsed="0.001744">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:38.421807" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:38.413477" elapsed="0.008426"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:38.412643" elapsed="0.009449">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:38.422571" elapsed="0.000170"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:38.423261" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:38.423796" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:38.404465" elapsed="0.019582">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:39.441448" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:39.440952" elapsed="0.000579">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:39.440023" elapsed="0.001798">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:39.441945" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:39.433487" elapsed="0.008557"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:39.432653" elapsed="0.009580">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:39.442781" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:39.443261" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:39.443778" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:39.424785" elapsed="0.019227">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:40.461739" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:40.461180" elapsed="0.000637">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:40.460244" elapsed="0.001795">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:40.462142" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:40.453765" elapsed="0.008470"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:40.452890" elapsed="0.009529">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:40.462948" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:40.463416" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:40.463936" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:40.444649" elapsed="0.019517">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:41.482056" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:41.481469" elapsed="0.000664">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:41.480491" elapsed="0.001865">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:41.482459" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:41.474075" elapsed="0.008478"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:41.472976" elapsed="0.009885">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:41.483340" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:41.483867" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:41.484332" elapsed="0.000046"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:41.464863" elapsed="0.019697">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:42.502742" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:42.502194" elapsed="0.000632">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:42.501259" elapsed="0.001806">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:42.503175" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:42.494797" elapsed="0.008474"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:42.493920" elapsed="0.009539">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:42.504005" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:42.504485" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:42.505007" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:42.485350" elapsed="0.019887">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:43.522252" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:43.521765" elapsed="0.000561">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:43.520843" elapsed="0.001706">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:43.522672" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:43.514407" elapsed="0.008390"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:43.513589" elapsed="0.009494">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:43.523559" elapsed="0.000069"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:43.524086" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:43.524550" elapsed="0.000070"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:43.505913" elapsed="0.018922">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:44.542394" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:44.541910" elapsed="0.000559">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:44.540978" elapsed="0.001768">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:44.542852" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:44.534499" elapsed="0.008448"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:44.533668" elapsed="0.009466">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:44.543634" elapsed="0.000073"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:44.544134" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:44.544617" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:44.525454" elapsed="0.019423">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:45.562166" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:45.561621" elapsed="0.000621">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:45.560631" elapsed="0.001864">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:45.562632" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:45.554125" elapsed="0.008637"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:45.553277" elapsed="0.009700">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:45.563494" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:45.564056" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:45.564524" elapsed="0.000069"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:45.545502" elapsed="0.019445">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:46.583146" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:46.582531" elapsed="0.000694">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:46.581508" elapsed="0.001946">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:46.583586" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:46.574963" elapsed="0.008781"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:46.574088" elapsed="0.009870">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:46.584438" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:46.584965" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:46.585432" elapsed="0.000045"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:46.565599" elapsed="0.020113">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:47.603898" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:47.603279" elapsed="0.000698">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:47.602272" elapsed="0.001930">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:47.604306" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:47.595515" elapsed="0.008886"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:47.594592" elapsed="0.010038">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:47.605147" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:47.605642" elapsed="0.000080"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:47.606144" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:47.586336" elapsed="0.020038">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:48.624252" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:48.623763" elapsed="0.000563">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:48.622834" elapsed="0.001750">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:48.624801" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:48.616328" elapsed="0.008574"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:48.615437" elapsed="0.009656">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:48.625590" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:48.626092" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:48.626578" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:48.607040" elapsed="0.019800">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:49.644159" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:49.643642" elapsed="0.000593">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:49.642742" elapsed="0.001724">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:49.644600" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:49.636243" elapsed="0.008497"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:49.635398" elapsed="0.009536">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:49.645417" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:49.645950" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:49.646418" elapsed="0.000046"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:49.627478" elapsed="0.019223">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:50.664316" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:50.663830" elapsed="0.000562">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:50.662896" elapsed="0.001744">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:50.664789" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:50.656369" elapsed="0.008534"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:50.655547" elapsed="0.009574">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:50.665635" elapsed="0.000075"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:50.666185" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:50.666807" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:50.647335" elapsed="0.019711">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:51.684164" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:51.683650" elapsed="0.000589">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:51.682740" elapsed="0.001736">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:51.684607" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:51.676277" elapsed="0.008454"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:51.675424" elapsed="0.009500">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:51.685400" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:51.685936" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:51.686409" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:51.667726" elapsed="0.019006">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:52.707900" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:52.707347" elapsed="0.000635">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:52.706400" elapsed="0.001820">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:52.708328" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:52.699805" elapsed="0.008621"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:52.698924" elapsed="0.009717">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:52.709161" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:52.709927" elapsed="0.000055"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:52.710408" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:52.687659" elapsed="0.023014">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:53.729143" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:53.728610" elapsed="0.000614">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:53.727536" elapsed="0.002085">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:53.729784" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:53.720838" elapsed="0.009048"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:53.719969" elapsed="0.010109">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:53.730594" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:53.731226" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:53.731824" elapsed="0.000051"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:53.711559" elapsed="0.020504">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:54.750494" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:54.749974" elapsed="0.000696">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:54.749044" elapsed="0.001980">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:54.751193" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:54.742572" elapsed="0.008736"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:54.741722" elapsed="0.009814">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:54.752066" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:54.752578" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:54.753090" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:54.732967" elapsed="0.020389">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:55.771995" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:55.771356" elapsed="0.000752">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:55.770353" elapsed="0.002119">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:55.772640" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:55.763633" elapsed="0.009192"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:55.762718" elapsed="0.010363">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:55.773792" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:55.774292" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:55.774823" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:55.754223" elapsed="0.020835">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:56.793186" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:56.792652" elapsed="0.000641">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:56.791753" elapsed="0.001859">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:56.793766" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:56.785252" elapsed="0.008616"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:56.784378" elapsed="0.009682">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:56.794579" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:56.795128" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:56.795633" elapsed="0.000078"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:56.775935" elapsed="0.019965">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:57.814820" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:57.814257" elapsed="0.000646">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:57.813285" elapsed="0.001863">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:57.815259" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:57.805990" elapsed="0.009365"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:57.805070" elapsed="0.010503">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:57.816105" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:57.816613" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:57.817121" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:57.796757" elapsed="0.020597">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:58.836023" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:58.835485" elapsed="0.000619">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:58.834546" elapsed="0.001800">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:58.836476" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:58.827805" elapsed="0.008769"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:58.826898" elapsed="0.009896">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:58.837466" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:58.837999" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:58.838501" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:58.818283" elapsed="0.020484">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:28:59.857290" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:28:59.856773" elapsed="0.000615">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:59.855830" elapsed="0.001836">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:28:59.857809" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:28:59.848932" elapsed="0.008976"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:28:59.847989" elapsed="0.010108">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:59.858615" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:59.859159" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:28:59.859657" elapsed="0.000079"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:28:59.839564" elapsed="0.020400">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:29:00.878787" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:29:00.878221" elapsed="0.000652">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:00.877220" elapsed="0.001895">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:29:00.879224" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:29:00.870450" elapsed="0.008873"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:00.869557" elapsed="0.010097">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:00.880200" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:00.880747" elapsed="0.000054"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:00.881233" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:29:00.860850" elapsed="0.020654">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:29:01.899615" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:29:01.899081" elapsed="0.000647">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:01.898138" elapsed="0.001837">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:29:01.900087" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:29:01.891526" elapsed="0.008660"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:01.890583" elapsed="0.009811">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:01.900925" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:01.901464" elapsed="0.000054"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:01.901988" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:29:01.882328" elapsed="0.019899">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:29:02.920648" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:29:02.920112" elapsed="0.000650">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:02.919173" elapsed="0.001835">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:29:02.921119" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:29:02.912602" elapsed="0.008614"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:02.911743" elapsed="0.009689">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:02.921962" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:02.922475" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:02.922986" elapsed="0.000173"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:29:02.903034" elapsed="0.020349">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:29:03.935642" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:29:03.935383" elapsed="0.000323">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:03.934967" elapsed="0.000901">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:29:03.935931" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:29:03.931974" elapsed="0.004008"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:03.931537" elapsed="0.004534">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:03.936330" elapsed="0.000031"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:03.936584" elapsed="0.000022"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:03.936824" elapsed="0.000022"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:29:03.924483" elapsed="0.012450">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:29:04.946571" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:29:04.946306" elapsed="0.000312">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:04.945905" elapsed="0.000871">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:29:04.946841" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:29:04.942867" elapsed="0.004023"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:04.942444" elapsed="0.004533">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:04.947230" elapsed="0.000021"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:04.947474" elapsed="0.000023"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:04.947712" elapsed="0.000022"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:29:04.937993" elapsed="0.009826">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:29:05.956922" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:29:05.956651" elapsed="0.000319">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:05.956214" elapsed="0.001062">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:29:05.957351" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:29:05.953082" elapsed="0.004321"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:05.952600" elapsed="0.004891">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:05.957785" elapsed="0.000022"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:05.958024" elapsed="0.000023"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:05.958239" elapsed="0.000022"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:29:05.948620" elapsed="0.009737">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:29:06.978092" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:29:06.977531" elapsed="0.000649">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:06.976578" elapsed="0.001886">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:29:06.978584" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:29:06.969759" elapsed="0.008955"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:06.968778" elapsed="0.010133">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:06.979461" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:06.979982" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:06.980481" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:29:06.959410" elapsed="0.021337">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:29:07.989986" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:29:07.989729" elapsed="0.000305">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:07.989298" elapsed="0.000910">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:29:07.990270" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:29:07.986338" elapsed="0.004228"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:07.985918" elapsed="0.004740">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:07.990942" elapsed="0.000021"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:07.991304" elapsed="0.000034"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:07.991533" elapsed="0.000021"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:29:07.981808" elapsed="0.009832">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:29:09.010597" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:29:09.010046" elapsed="0.000669">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:09.009104" elapsed="0.001876">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:29:09.011101" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:29:09.002522" elapsed="0.008681"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:09.001592" elapsed="0.009827">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:09.011973" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:09.012491" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:09.013141" elapsed="0.000051"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:29:08.992716" elapsed="0.020689">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:29:10.031983" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:29:10.031422" elapsed="0.000652">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:10.030485" elapsed="0.001874">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:29:10.032479" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:29:10.023882" elapsed="0.008698"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:10.022979" elapsed="0.009865">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:10.033401" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:10.033923" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:10.034420" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:29:10.014498" elapsed="0.020155">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:29:11.054132" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:29:11.053574" elapsed="0.000649">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:11.052627" elapsed="0.001895">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:29:11.054640" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:29:11.045793" elapsed="0.008982"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:11.044650" elapsed="0.010321">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:11.055523" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:11.056041" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:11.056810" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:29:11.035763" elapsed="0.021285">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:29:12.075815" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:29:12.075195" elapsed="0.000713">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:12.074238" elapsed="0.001959">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:29:12.076343" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:29:12.067399" elapsed="0.009048"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:12.066471" elapsed="0.010168">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:12.077197" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:12.077744" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:12.078218" elapsed="0.000142"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:29:12.058088" elapsed="0.020461">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:29:13.098039" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:29:13.097489" elapsed="0.000636">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:13.096553" elapsed="0.001857">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:29:13.098527" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:29:13.089907" elapsed="0.008721"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:13.089006" elapsed="0.010011">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:13.099555" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:13.100075" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:13.100571" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:29:13.079674" elapsed="0.021159">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:29:14.119348" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:29:14.118810" elapsed="0.000624">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:14.117881" elapsed="0.001854">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:29:14.119859" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:29:14.111192" elapsed="0.008779"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:14.110317" elapsed="0.009846">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.120733" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.121281" elapsed="0.000061"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.121797" elapsed="0.000046"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:29:14.101920" elapsed="0.020109">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:29:14.122207" level="FAIL">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>90s</arg>
<arg>1s</arg>
<arg>Check Ovsdb Shards Status</arg>
<arg>${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-10-06T01:27:43.300483" elapsed="90.821997">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<doc>Check Shard Status after some cluster event.</doc>
<status status="FAIL" start="2026-10-06T01:27:43.300106" elapsed="90.822611">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<doc>Create original cluster list and check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:27:42.949063" elapsed="91.173952">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</test>
<test id="s1-s2-s1-t29" name="Check Entity Owner Status After Recover" line="143">
<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-10-06T01:29:14.126831" elapsed="0.000497"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:29:14.126215" elapsed="0.001225"/>
</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-10-06T01:29:14.129648" elapsed="0.000063"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:14.129393" elapsed="0.000390"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.129346" elapsed="0.000486"/>
</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-10-06T01:29:14.134203" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:14.134017" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.133980" elapsed="0.000387"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:14.136468" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:14.135702" elapsed="0.000934"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:14.137667" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:14.137015" elapsed="0.000738"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:14.137846" elapsed="0.000059"/>
</return>
<msg time="2026-10-06T01:29:14.138136" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:14.134854" elapsed="0.003333"/>
</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-10-06T01:29:14.143672" elapsed="0.000059"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:14.143486" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.143448" elapsed="0.000396"/>
</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-10-06T01:29:14.146469" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:14.146279" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.146217" elapsed="0.000393"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:14.147345" level="INFO">${karaf_connection_index} = 388</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-10-06T01:29:14.146969" elapsed="0.000410"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:14.147904" 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-10-06T01:29:14.147606" elapsed="0.000333"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:14.183945" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:14.148787" elapsed="0.035431"/>
</kw>
<msg time="2026-10-06T01:29:14.184467" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:14.184525" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.148151" elapsed="0.036424"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:14.251134" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:14.185444" elapsed="0.065978"/>
</kw>
<msg time="2026-10-06T01:29:14.251639" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:14.251710" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.184831" elapsed="0.066918"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.252193" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:14.251867" elapsed="0.000419"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.251830" elapsed="0.000485"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:14.252973" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:14.252512" elapsed="0.000546"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.253339" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:14.253120" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.253103" elapsed="0.000332"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:14.253474" elapsed="0.000046"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:14.256337" elapsed="0.000519"/>
</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-10-06T01:29:14.258139" elapsed="0.000530"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:14.260050" elapsed="0.000451"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:14.254470" elapsed="0.006103"/>
</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-10-06T01:29:14.253883" elapsed="0.006826"/>
</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="PASS" start="2026-10-06T01:29:14.145628" elapsed="0.115163"/>
</kw>
<msg time="2026-10-06T01:29:14.260876" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:14.260917" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.144185" elapsed="0.116768"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:14.261112" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:14.261026" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.261009" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:29:14.261562" elapsed="0.000024"/>
</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-10-06T01:29:14.262023" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:14.262091" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:29:14.142820" elapsed="0.119360"/>
</kw>
<msg time="2026-10-06T01:29:14.262285" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:14.262327" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.138997" elapsed="0.123367"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.262667" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:14.262440" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.262423" elapsed="0.000335"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:14.138653" elapsed="0.124128"/>
</iter>
<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-10-06T01:29:14.265448" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:14.265360" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.265341" elapsed="0.000170"/>
</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-10-06T01:29:14.266616" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:14.266531" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.266514" elapsed="0.000189"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:14.267102" level="INFO">${karaf_connection_index} = 390</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-10-06T01:29:14.266853" elapsed="0.000274"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:14.267498" 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-10-06T01:29:14.267303" elapsed="0.000219"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:14.301472" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:14.268110" elapsed="0.033643"/>
</kw>
<msg time="2026-10-06T01:29:14.301948" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:14.301990" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.267693" elapsed="0.034332"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:14.370006" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:14.302802" elapsed="0.067407"/>
</kw>
<msg time="2026-10-06T01:29:14.370388" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:14.370430" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.302238" elapsed="0.068312"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.370901" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:14.370639" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.370613" elapsed="0.000388"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:14.371552" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:14.371185" elapsed="0.000449"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.371927" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:14.371727" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.371709" elapsed="0.000312"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:14.372056" elapsed="0.000039"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:14.375022" elapsed="0.000498"/>
</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-10-06T01:29:14.376789" elapsed="0.000504"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:14.378701" elapsed="0.000317"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:14.373275" elapsed="0.005810"/>
</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-10-06T01:29:14.372412" elapsed="0.006794"/>
</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="PASS" start="2026-10-06T01:29:14.266270" elapsed="0.113048"/>
</kw>
<msg time="2026-10-06T01:29:14.379403" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:14.379443" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.265663" elapsed="0.113816"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:14.379633" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:14.379549" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.379532" elapsed="0.000257"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.380118" elapsed="0.000024"/>
</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-10-06T01:29:14.380434" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:14.380499" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:29:14.265034" elapsed="0.115549"/>
</kw>
<msg time="2026-10-06T01:29:14.380669" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:14.380728" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.263063" elapsed="0.117701"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.381055" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:14.380833" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.380817" elapsed="0.000309"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:14.262920" elapsed="0.118227"/>
</iter>
<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-10-06T01:29:14.383940" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:14.383851" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.383832" elapsed="0.000170"/>
</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-10-06T01:29:14.385127" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:14.385040" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.385023" elapsed="0.000205"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:14.385651" level="INFO">${karaf_connection_index} = 392</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-10-06T01:29:14.385406" elapsed="0.000289"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:14.386046" 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-10-06T01:29:14.385859" elapsed="0.000211"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:14.413474" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:14.386658" elapsed="0.026993"/>
</kw>
<msg time="2026-10-06T01:29:14.413835" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:14.413877" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.386224" elapsed="0.027688"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:14.466076" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:14.414516" elapsed="0.051810"/>
</kw>
<msg time="2026-10-06T01:29:14.466522" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:14.466564" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.414078" elapsed="0.052524"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.466990" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:14.466722" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.466666" elapsed="0.000425"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:14.467728" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "S "t "a "t "[78Cu "[A[78Cs
 "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:14.467317" elapsed="0.000501"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.468079" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:14.467881" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.467864" elapsed="0.000309"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:14.468207" elapsed="0.000046"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:14.470869" elapsed="0.000515"/>
</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-10-06T01:29:14.472655" elapsed="0.000782"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:14.474768" elapsed="0.000327"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:14.469090" elapsed="0.006072"/>
</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-10-06T01:29:14.468551" elapsed="0.006747"/>
</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="PASS" start="2026-10-06T01:29:14.384780" elapsed="0.090597"/>
</kw>
<msg time="2026-10-06T01:29:14.475462" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:14.475503" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.384152" elapsed="0.091387"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:14.475715" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:14.475610" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.475593" elapsed="0.000203"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.476123" elapsed="0.000024"/>
</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-10-06T01:29:14.476506" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:14.476573" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:29:14.383525" elapsed="0.093136"/>
</kw>
<msg time="2026-10-06T01:29:14.477001" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:14.477041" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.381428" elapsed="0.095649"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.477386" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:14.477149" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.477132" elapsed="0.000328"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:14.381288" elapsed="0.096193"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:14.138327" elapsed="0.339188"/>
</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-10-06T01:29:14.133334" elapsed="0.344241"/>
</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-10-06T01:29:14.128757" elapsed="0.348877"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.127798" elapsed="0.349903"/>
</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-10-06T01:29:14.125047" elapsed="0.352710"/>
</kw>
<kw name="Get Ovsdb Entity Owner Status For One Device" owner="ClusterOvsdb">
<msg time="2026-10-06T01:29:14.481698" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<var>${new_owner}</var>
<var>${new_candidate_list}</var>
<arg>ovsdb://uuid/${ovsdb_uuid}</arg>
<arg>1</arg>
<doc>Check Entity Owner Status and identify owner and successors for an ovs device ${device}. Request is sent to controller ${controller_index}.</doc>
<status status="FAIL" start="2026-10-06T01:29:14.480460" elapsed="0.001274">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_owner}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.481939" elapsed="0.000021"/>
</kw>
<doc>Check Entity Owner Status and identify owner and candidate.</doc>
<status status="FAIL" start="2026-10-06T01:29:14.123832" elapsed="0.358266">Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s2-s1-t30" name="Create Bridge Manually and Verify After Recover" line="150">
<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-10-06T01:29:14.483501" elapsed="0.000223"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:29:14.483227" elapsed="0.000547"/>
</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-10-06T01:29:14.484695" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:14.484590" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.484573" elapsed="0.000188"/>
</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-10-06T01:29:14.486691" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:14.486593" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.486577" elapsed="0.000179"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:14.487674" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:14.487346" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:14.488143" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:14.487868" elapsed="0.000300"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:14.488209" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:29:14.488350" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:14.486965" elapsed="0.001409"/>
</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-10-06T01:29:14.491073" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:14.490987" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.490970" elapsed="0.000168"/>
</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-10-06T01:29:14.492430" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:14.492339" elapsed="0.000135"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.492320" elapsed="0.000493"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:14.493255" level="INFO">${karaf_connection_index} = 388</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-10-06T01:29:14.492980" elapsed="0.000303"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:14.493656" 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-10-06T01:29:14.493461" elapsed="0.000237"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:14.527387" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:14.494292" elapsed="0.033296"/>
</kw>
<msg time="2026-10-06T01:29:14.527777" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:14.527820" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.493857" elapsed="0.033998"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:14.609956" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:14.528465" elapsed="0.081700"/>
</kw>
<msg time="2026-10-06T01:29:14.610346" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:14.610390" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.528022" elapsed="0.082404"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.610744" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:14.610499" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.610481" elapsed="0.000362"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:14.611399" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:14.611026" elapsed="0.000462"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.611800" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:14.611556" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.611538" elapsed="0.000365"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:14.611936" elapsed="0.000038"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:14.614579" elapsed="0.000523"/>
</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-10-06T01:29:14.616397" elapsed="0.000514"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:14.618163" elapsed="0.000349"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:14.612820" elapsed="0.005760"/>
</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-10-06T01:29:14.612275" elapsed="0.006451"/>
</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="PASS" start="2026-10-06T01:29:14.492021" elapsed="0.126786"/>
</kw>
<msg time="2026-10-06T01:29:14.618894" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:14.618935" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.491307" elapsed="0.127665"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:14.619131" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:14.619043" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.619026" elapsed="0.000184"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:29:14.619561" elapsed="0.000023"/>
</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-10-06T01:29:14.619954" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:14.620024" 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="PASS" start="2026-10-06T01:29:14.490696" elapsed="0.129420"/>
</kw>
<msg time="2026-10-06T01:29:14.620206" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:14.620263" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.488732" elapsed="0.131569"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.620599" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:14.620375" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.620358" elapsed="0.000605"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:14.488573" elapsed="0.132417"/>
</iter>
<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-10-06T01:29:14.623670" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:14.623581" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.623563" elapsed="0.000191"/>
</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-10-06T01:29:14.624896" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:14.624810" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.624793" elapsed="0.000167"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:14.625371" level="INFO">${karaf_connection_index} = 390</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-10-06T01:29:14.625104" elapsed="0.000292"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:14.625757" 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-10-06T01:29:14.625558" elapsed="0.000223"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:14.661435" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:14.626371" elapsed="0.035345"/>
</kw>
<msg time="2026-10-06T01:29:14.661923" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:14.661966" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.625936" elapsed="0.036066"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:14.739589" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:14.662774" elapsed="0.077116"/>
</kw>
<msg time="2026-10-06T01:29:14.740090" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:14.740132" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.662225" elapsed="0.077944"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.740632" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:14.740310" elapsed="0.000419"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.740270" elapsed="0.000492"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:14.741395" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:14.740959" elapsed="0.000529"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.741781" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:14.741552" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.741534" elapsed="0.000344"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:14.741920" elapsed="0.000053"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:14.744916" elapsed="0.000521"/>
</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-10-06T01:29:14.746789" elapsed="0.000513"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:14.748485" elapsed="0.000350"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:14.743067" elapsed="0.005838"/>
</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-10-06T01:29:14.742463" elapsed="0.006562"/>
</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="PASS" start="2026-10-06T01:29:14.624516" elapsed="0.124594"/>
</kw>
<msg time="2026-10-06T01:29:14.749204" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:14.749261" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.623905" elapsed="0.125396"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:14.749468" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:14.749379" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.749360" elapsed="0.000187"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.750197" elapsed="0.000024"/>
</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-10-06T01:29:14.750601" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:14.750666" elapsed="0.000032"/>
</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="PASS" start="2026-10-06T01:29:14.623281" elapsed="0.127498"/>
</kw>
<msg time="2026-10-06T01:29:14.750874" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:14.750915" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.621276" elapsed="0.129676"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.751266" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:14.751028" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.751011" elapsed="0.000328"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:14.621118" elapsed="0.130244"/>
</iter>
<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-10-06T01:29:14.754154" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:14.754068" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.754050" elapsed="0.000168"/>
</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-10-06T01:29:14.755330" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:14.755229" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.755212" elapsed="0.000180"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:14.755802" level="INFO">${karaf_connection_index} = 392</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-10-06T01:29:14.755535" elapsed="0.000292"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:14.756178" 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-10-06T01:29:14.755988" elapsed="0.000214"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:14.783153" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:14.756803" elapsed="0.026542"/>
</kw>
<msg time="2026-10-06T01:29:14.783502" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:14.783544" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.756373" elapsed="0.027206"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:14.835839" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:14.784220" elapsed="0.051840"/>
</kw>
<msg time="2026-10-06T01:29:14.836221" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:14.836280" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.783779" elapsed="0.052538"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.836594" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:14.836387" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.836368" elapsed="0.000349"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:14.837260" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "l "l "y "[C "[78Ca "[A[78Cn
 "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:14.836899" elapsed="0.000448"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.837606" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:14.837409" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.837393" elapsed="0.000329"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:14.837753" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:14.840229" elapsed="0.000538"/>
</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-10-06T01:29:14.842003" elapsed="0.000504"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:14.843959" elapsed="0.000324"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:14.838524" elapsed="0.005826"/>
</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-10-06T01:29:14.838019" elapsed="0.006447"/>
</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="PASS" start="2026-10-06T01:29:14.754970" elapsed="0.089573"/>
</kw>
<msg time="2026-10-06T01:29:14.844624" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:14.844663" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.754381" elapsed="0.090335"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:14.844874" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:14.844787" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.844770" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.845319" elapsed="0.000024"/>
</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-10-06T01:29:14.845620" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:14.845783" 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="PASS" start="2026-10-06T01:29:14.753761" elapsed="0.092113"/>
</kw>
<msg time="2026-10-06T01:29:14.845958" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:14.845998" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.751643" elapsed="0.094389"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.846336" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:14.846101" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.846085" elapsed="0.000324"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:14.751500" elapsed="0.094930"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:14.488426" elapsed="0.358033"/>
</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-10-06T01:29:14.486298" elapsed="0.360223"/>
</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-10-06T01:29:14.484326" elapsed="0.362296"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:14.483920" elapsed="0.362768"/>
</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-10-06T01:29:14.482885" elapsed="0.363864"/>
</kw>
<kw name="Create Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:14.850460" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:14.850206" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:14.850188" elapsed="0.000346"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:14.850886" 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-10-06T01:29:14.850978" 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-10-06T01:29:14.850742" elapsed="0.000261"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:14.851495" level="INFO">Attempting to execute command "sudo ovs-vsctl add-br br-s1" on remote system "10.30.170.234" 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-10-06T01:29:14.851189" elapsed="0.000349"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:14.852063" level="INFO">${conn_id} = 521</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-10-06T01:29:14.851729" elapsed="0.000361"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:29:14.852993" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:29:14.853069" 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-10-06T01:29:14.852691" elapsed="0.000400"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:14.853255" elapsed="0.000286"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:29:14.854365" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:29:15.467891" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:29:15 UTC 2026

  System load:  0.0                Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:27:40 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:29:14.854086" elapsed="0.614091"/>
</kw>
<msg time="2026-10-06T01:29:15.468327" 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-10-06T01:29:14.853719" elapsed="0.614747"/>
</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-10-06T01:29:14.852311" elapsed="0.616321"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:29:15.469482" level="INFO">Executing command 'sudo ovs-vsctl add-br br-s1'.</msg>
<msg time="2026-10-06T01:29:15.513358" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:29:15.513647" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:29:15.513784" level="INFO">${stderr} = </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-10-06T01:29:15.469074" elapsed="0.044761"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:15.514290" elapsed="0.000568"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.516099" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.515423" elapsed="0.000765"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:15.516672" elapsed="0.000071"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:15.516393" elapsed="0.000419"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.516338" elapsed="0.000525"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:29:15.517162" elapsed="0.000088"/>
</return>
<status status="PASS" start="2026-10-06T01:29:15.516972" elapsed="0.000351"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.516940" elapsed="0.000435"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:15.517597" elapsed="0.000033"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:15.519350" elapsed="0.000694"/>
</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-10-06T01:29:15.520480" elapsed="0.000366"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:15.521171" elapsed="0.000227"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:15.518343" elapsed="0.003165"/>
</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-10-06T01:29:14.849785" elapsed="0.671882"/>
</kw>
<msg time="2026-10-06T01:29:15.521807" 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-10-06T01:29:14.849224" elapsed="0.672692"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:29:14.848806" elapsed="0.673270"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.523305" level="INFO">${dictionary_operational} = {'br-s1': '5'}</msg>
<var>${dictionary_operational}</var>
<arg>br-s1=5</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:29:15.522531" elapsed="0.000840"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.524483" level="INFO">${dictionary_config} = {'br-s1': '0'}</msg>
<var>${dictionary_config}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:29:15.523831" elapsed="0.000708"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.534923" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:15.534076" elapsed="0.000908"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.536010" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:15.535353" elapsed="0.000712"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:15.536157" elapsed="0.000067"/>
</return>
<msg time="2026-10-06T01:29:15.536477" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:15.533209" elapsed="0.003320"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.541192" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:29:15.540808" elapsed="0.000433"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:15.541301" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:29:15.541473" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:15.540334" elapsed="0.001171"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.543243" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.542907" elapsed="0.000397"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.543894" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.543564" elapsed="0.000386"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:15.556807" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:15.557133" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '144'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:29:15.557462" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:15.544378" elapsed="0.013124"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.544039" elapsed="0.013565"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.558162" elapsed="0.000169"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:15.557674" elapsed="0.000720"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.544015" elapsed="0.014411"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.560999" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.560328" elapsed="0.000738"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.559918" elapsed="0.001193"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.559880" elapsed="0.001262"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.561987" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.561567" elapsed="0.000478"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.561214" elapsed="0.000874"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.561193" elapsed="0.000926"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.563028" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:15.562436" elapsed="0.000627"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.563475" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:15.563153" elapsed="0.000396"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.564326" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:15.563837" elapsed="0.000528"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.563581" elapsed="0.000830"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.563130" elapsed="0.001311"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.565188" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:15.564703" elapsed="0.000520"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.565616" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:15.565330" elapsed="0.000378"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.566347" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:15.565962" elapsed="0.000420"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.565741" elapsed="0.000686"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.565306" elapsed="0.001149"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:15.566667" elapsed="0.000448"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:29:15.567773" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:15.567356" elapsed="0.000452"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:29:15.568022" elapsed="0.000329"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:29:15.559151" elapsed="0.009287"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:29:15.568656" elapsed="0.000089"/>
</return>
<status status="PASS" start="2026-10-06T01:29:15.568529" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.568505" elapsed="0.000327"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.569037" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:29:15.569126" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:29:15.569460" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:29:15.541967" elapsed="0.027530"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:29:15.569564" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:29:15.569762" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:29:15.539735" elapsed="0.030063"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.571481" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:15.570974" elapsed="0.000598"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:29:15.570669" elapsed="0.000954"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:29:15.570475" elapsed="0.001193"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:29:15.570108" elapsed="0.001653"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:15.536944" elapsed="0.034861"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.575631" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:15.575251" elapsed="0.000415"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:15.575745" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:29:15.575923" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:15.574784" elapsed="0.001172"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.577611" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.577300" elapsed="0.000369"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.578284" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.577961" elapsed="0.000379"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:15.593019" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01wo4j9u7mox61tr0ncscuykk72.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:15.593185" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:29:15.593391" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:15.578769" elapsed="0.014659"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.578425" elapsed="0.015063"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.593794" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:15.593526" elapsed="0.000354"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.578401" elapsed="0.015508"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.595815" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.595306" elapsed="0.000570"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.594948" elapsed="0.000973"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.594921" elapsed="0.001032"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.596766" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.596368" elapsed="0.001578"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.596023" elapsed="0.002076"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.596002" elapsed="0.002175"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.599921" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:15.598797" elapsed="0.001185"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.600666" elapsed="0.000076"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:15.600151" elapsed="0.000670"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.601901" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:15.601255" elapsed="0.000703"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.600872" elapsed="0.001159"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.600103" elapsed="0.001974"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.603306" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:15.602484" elapsed="0.000881"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.603993" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:15.603509" elapsed="0.000601"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.605151" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:15.604525" elapsed="0.000819"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.604159" elapsed="0.001264"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.603471" elapsed="0.001997"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:15.605841" elapsed="0.000706"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:29:15.607499" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:15.606931" elapsed="0.000621"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:29:15.607918" elapsed="0.000518"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:29:15.594409" elapsed="0.014164"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:29:15.608948" elapsed="0.000074"/>
</return>
<status status="PASS" start="2026-10-06T01:29:15.608749" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.608708" elapsed="0.000439"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.609484" elapsed="0.000046"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:29:15.609628" elapsed="0.000031"/>
</return>
<msg time="2026-10-06T01:29:15.610303" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:29:15.576407" elapsed="0.033993"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:29:15.610509" elapsed="0.000057"/>
</return>
<msg time="2026-10-06T01:29:15.610820" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:29:15.574160" elapsed="0.036712"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.613384" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:15.612622" elapsed="0.000902"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:29:15.612257" elapsed="0.001346"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:29:15.611985" elapsed="0.001682"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:29:15.611395" elapsed="0.002417"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:15.571921" elapsed="0.041960"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.620093" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:15.619456" elapsed="0.000693"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:15.620262" elapsed="0.000061"/>
</return>
<msg time="2026-10-06T01:29:15.620534" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:15.618718" elapsed="0.001866"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.623281" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.622750" elapsed="0.000626"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.624730" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.623819" elapsed="0.001007"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:15.640960" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node08kx9y5d080lbj5jl4gkt6rg2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:15.641198" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:29:15.641421" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:15.625499" elapsed="0.015977"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.624967" elapsed="0.016597"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.641998" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:15.641619" elapsed="0.000587"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.624929" elapsed="0.017350"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.645270" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.644485" elapsed="0.000890"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.643933" elapsed="0.001513"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.643893" elapsed="0.001604"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.646829" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.646170" elapsed="0.000754"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.645610" elapsed="0.001384"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.645576" elapsed="0.001467"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.648272" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:15.647449" elapsed="0.000885"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.648964" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:15.648477" elapsed="0.000609"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.650141" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:15.649508" elapsed="0.000688"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.649136" elapsed="0.001156"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.648440" elapsed="0.001898"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.651521" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:15.650744" elapsed="0.000832"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.652205" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:15.651752" elapsed="0.000593"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.653386" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:15.652772" elapsed="0.000668"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.652394" elapsed="0.001119"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.651713" elapsed="0.001845"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:15.653899" elapsed="0.000674"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:29:15.655467" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:15.654952" elapsed="0.000569"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:29:15.655882" elapsed="0.000494"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:29:15.643048" elapsed="0.013452"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:29:15.656850" elapsed="0.000055"/>
</return>
<status status="PASS" start="2026-10-06T01:29:15.656637" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.656600" elapsed="0.000424"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.657354" elapsed="0.000045"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:29:15.657496" elapsed="0.000031"/>
</return>
<msg time="2026-10-06T01:29:15.658004" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:29:15.621313" elapsed="0.036746"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:29:15.658161" elapsed="0.000056"/>
</return>
<msg time="2026-10-06T01:29:15.658456" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:29:15.617638" elapsed="0.040869"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.660855" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:15.660128" elapsed="0.000862"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:29:15.659775" elapsed="0.001295"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:29:15.659513" elapsed="0.001684"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:29:15.658985" elapsed="0.002352"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:15.614065" elapsed="0.047344"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:15.536649" elapsed="0.124818"/>
</for>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:29:15.531985" elapsed="0.129591"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:29:15.525007" elapsed="0.136713"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.670294" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:15.669817" elapsed="0.000516"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.670943" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:15.670544" elapsed="0.000432"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:15.671033" elapsed="0.000039"/>
</return>
<msg time="2026-10-06T01:29:15.671210" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:15.669296" elapsed="0.001961"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.674929" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:29:15.674477" elapsed="0.000489"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:15.675025" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:29:15.675193" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:15.674017" elapsed="0.001223"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.676866" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.676538" elapsed="0.000385"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.677501" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.677182" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:15.686471" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:15.686723" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '5397'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;41297796-b474-41c3-aa58-5893fab7fa6e&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;78c80c1f-dd63-431c-b6ee-002221615a09&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;f96bb8d6-692b-4c53-81c0-f250ff4f27c1&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;96:77:29:41:c3:41&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;14&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:96:77:29:41:c3:41&lt;/datapath-id&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:29:15.686990" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:15.677976" elapsed="0.009049"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.677639" elapsed="0.009440"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.687341" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:15.687112" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.677616" elapsed="0.009835"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.689310" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;41297796-b474-41c3-aa58-5893fab7fa6e&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;78c80c1f-dd63-431c-b6ee-002221615a09&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;f96bb8d6-692b-4c53-81c0-f250ff4f27c1&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;96:77:29:41:c3:41&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;14&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:96:77:29:41:c3:41&lt;/datapath-id&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.688765" elapsed="0.000700"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.688412" elapsed="0.001098"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.688387" elapsed="0.001154"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.690364" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.689966" elapsed="0.000455"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.689612" elapsed="0.000887"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.689591" elapsed="0.000942"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.691304" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:15.690796" elapsed="0.000543"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.691733" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:15.691429" elapsed="0.000378"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.694940" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:15.692056" elapsed="0.002920"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.691838" elapsed="0.003186"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.691407" elapsed="0.003645"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.695814" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:15.695307" elapsed="0.000543"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.696242" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:15.695941" elapsed="0.000380"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.696975" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:15.696573" elapsed="0.000436"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.696354" elapsed="0.000700"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.695917" elapsed="0.001165"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:15.697294" elapsed="0.000638"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:29:15.698489" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:15.698159" elapsed="0.000365"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:29:15.698752" elapsed="0.000296"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:29:15.687920" elapsed="0.011206"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:29:15.699348" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-10-06T01:29:15.699212" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.699189" elapsed="0.000273"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.699654" elapsed="0.000049"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:29:15.699765" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:29:15.700142" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:29:15.675651" elapsed="0.024531"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:29:15.700268" elapsed="0.000042"/>
</return>
<msg time="2026-10-06T01:29:15.700446" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:29:15.673428" elapsed="0.027054"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.701986" level="INFO">Item found from container 5 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:15.701535" elapsed="0.000568"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:29:15.701310" elapsed="0.000844"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:29:15.701096" elapsed="0.001096"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:29:15.700783" elapsed="0.001493"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:15.671470" elapsed="0.030854"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.705943" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:15.705541" elapsed="0.000436"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:15.706080" elapsed="0.000039"/>
</return>
<msg time="2026-10-06T01:29:15.706272" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:15.705070" elapsed="0.001241"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.707958" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.707622" elapsed="0.000394"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.708605" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.708293" elapsed="0.000368"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:15.721272" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01wo4j9u7mox61tr0ncscuykk72.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:15.721499" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2408'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"41297796-b474-41c3-aa58-5893fab7fa6e","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"78c80c1f-dd63-431c-b6ee-002221615a09","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"f96bb8d6-692b-4c53-81c0-f250ff4f27c1","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"96:77:29:41:c3:41","ovsdb:ofport":65534,"ovsdb:ifindex":14}],"ovsdb:datapath-id":"00:00:96:77:29:41:c3:41"}]}]}} 
 </msg>
<msg time="2026-10-06T01:29:15.721673" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:15.709085" elapsed="0.012654"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.708769" elapsed="0.013038"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.722114" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:15.721847" elapsed="0.000354"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.708744" elapsed="0.013509"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.724321" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"41297796-b474-41c3-aa58-5893fab7fa6e","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"78c80c1f-dd63-431c-b6ee-002221615a09","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"f96bb8d6-692b-4c53-81c0-f250ff4f27c1","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"96:77:29:41:c3:41","ovsdb:ofport":65534,"ovsdb:ifindex":14}],"ovsdb:datapath-id":"00:00:96:77:29:41:c3:41"}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.723741" elapsed="0.000666"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.723365" elapsed="0.001145"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.723338" elapsed="0.001206"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.725467" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.724980" elapsed="0.000546"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.724616" elapsed="0.000955"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.724594" elapsed="0.001008"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.726421" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:15.725878" elapsed="0.000578"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.727172" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:15.726867" elapsed="0.000404"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.727950" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:15.727538" elapsed="0.000448"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.727304" elapsed="0.000730"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.726525" elapsed="0.001536"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.728828" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:15.728323" elapsed="0.000542"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.729262" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:15.728958" elapsed="0.000381"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.730068" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:15.729651" elapsed="0.000451"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.729371" elapsed="0.000778"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.728934" elapsed="0.001244"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:15.730399" elapsed="0.000445"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:29:15.731425" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:15.731069" elapsed="0.000391"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:29:15.731711" elapsed="0.000440"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:29:15.722794" elapsed="0.009459"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:29:15.732468" elapsed="0.000045"/>
</return>
<status status="PASS" start="2026-10-06T01:29:15.732347" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.732322" elapsed="0.000267"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.732812" elapsed="0.000029"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:29:15.732903" elapsed="0.000019"/>
</return>
<msg time="2026-10-06T01:29:15.733275" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:29:15.706747" elapsed="0.026572"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:29:15.733385" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:29:15.733556" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:29:15.704470" elapsed="0.029120"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.735204" level="INFO">Item found from container 5 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:15.734757" elapsed="0.000572"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:29:15.734506" elapsed="0.000875"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:29:15.734348" elapsed="0.001074"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:29:15.733945" elapsed="0.001547"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:15.702434" elapsed="0.033144"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.739433" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:15.739072" elapsed="0.000387"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:15.739503" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:29:15.739628" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:15.738593" elapsed="0.001058"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.740863" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.740621" elapsed="0.000286"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.741332" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.741098" elapsed="0.000276"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:15.753554" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node08kx9y5d080lbj5jl4gkt6rg2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:15.753736" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2408'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"41297796-b474-41c3-aa58-5893fab7fa6e","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"78c80c1f-dd63-431c-b6ee-002221615a09","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"f96bb8d6-692b-4c53-81c0-f250ff4f27c1","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"96:77:29:41:c3:41","ovsdb:ofport":65534,"ovsdb:ifindex":14}],"ovsdb:datapath-id":"00:00:96:77:29:41:c3:41"}]}]}} 
 </msg>
<msg time="2026-10-06T01:29:15.753841" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:15.741666" elapsed="0.012200"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.741437" elapsed="0.012469"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.754084" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:15.753930" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.741420" elapsed="0.012743"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.755572" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"41297796-b474-41c3-aa58-5893fab7fa6e","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"78c80c1f-dd63-431c-b6ee-002221615a09","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"f96bb8d6-692b-4c53-81c0-f250ff4f27c1","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"96:77:29:41:c3:41","ovsdb:ofport":65534,"ovsdb:ifindex":14}],"ovsdb:datapath-id":"00:00:96:77:29:41:c3:41"}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.755181" elapsed="0.000482"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.754890" elapsed="0.000822"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.754867" elapsed="0.000869"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.756465" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.756028" elapsed="0.000480"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.755789" elapsed="0.000750"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.755773" elapsed="0.000789"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.757105" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:15.756751" elapsed="0.000379"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.757488" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:15.757215" elapsed="0.000331"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.758013" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:15.757744" elapsed="0.000293"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.757569" elapsed="0.000501"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.757192" elapsed="0.000899"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.758623" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:15.758280" elapsed="0.000367"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.758932" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:15.758728" elapsed="0.000256"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.759531" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:15.759165" elapsed="0.000391"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:15.759007" elapsed="0.000584"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.758710" elapsed="0.000901"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:15.759775" elapsed="0.000299"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:29:15.760474" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:15.760251" elapsed="0.000248"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:29:15.760649" elapsed="0.000230"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:29:15.754502" elapsed="0.006433"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:29:15.761079" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:15.760998" elapsed="0.000137"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.760981" elapsed="0.000177"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.761313" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:29:15.761377" elapsed="0.000015"/>
</return>
<msg time="2026-10-06T01:29:15.761628" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:29:15.739978" elapsed="0.021676"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:29:15.761715" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:29:15.761840" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:29:15.737950" elapsed="0.023914"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.763068" level="INFO">Item found from container 5 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:15.762750" elapsed="0.000392"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:29:15.762535" elapsed="0.000643"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:29:15.762398" elapsed="0.000808"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:29:15.762077" elapsed="0.001200"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:15.735719" elapsed="0.027623"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:15.671322" elapsed="0.092048"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:29:15.668575" elapsed="0.094845"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:29:15.662187" elapsed="0.101285"/>
</kw>
<doc>Create bridge br-s1 using OVS command and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:29:14.848405" elapsed="0.915129"/>
</kw>
<doc>Create bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="PASS" start="2026-10-06T01:29:14.482343" elapsed="1.281319"/>
</test>
<test id="s1-s2-s1-t31" name="Add Port Manually and Verify After Recover" line="154">
<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-10-06T01:29:15.765339" elapsed="0.000201"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:29:15.765057" elapsed="0.000535"/>
</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-10-06T01:29:15.766720" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:15.766616" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.766593" 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-10-06T01:29:15.768814" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:15.768720" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.768702" elapsed="0.000197"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.769897" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:15.769544" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.770369" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:15.770076" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:15.770435" elapsed="0.000028"/>
</return>
<msg time="2026-10-06T01:29:15.770563" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:15.769155" elapsed="0.001431"/>
</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-10-06T01:29:15.773273" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:15.773143" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.773120" elapsed="0.000243"/>
</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-10-06T01:29:15.774547" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:15.774462" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.774445" elapsed="0.000167"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:15.775016" level="INFO">${karaf_connection_index} = 388</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-10-06T01:29:15.774781" elapsed="0.000268"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:15.775472" 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-10-06T01:29:15.775267" elapsed="0.000230"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:15.807820" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:15.776101" elapsed="0.031928"/>
</kw>
<msg time="2026-10-06T01:29:15.808219" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:15.808286" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:15.775655" elapsed="0.032673"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:15.879380" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:15.809010" elapsed="0.070560"/>
</kw>
<msg time="2026-10-06T01:29:15.879794" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:15.879836" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:15.808511" elapsed="0.071361"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.880158" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:15.879946" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.879927" elapsed="0.000377"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:15.880900" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:15.880528" elapsed="0.000457"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.881263" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:15.881048" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.881031" elapsed="0.000327"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:15.881389" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:15.884018" elapsed="0.000503"/>
</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-10-06T01:29:15.885851" elapsed="0.000509"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:15.887578" elapsed="0.000490"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:15.882215" elapsed="0.005919"/>
</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-10-06T01:29:15.881705" elapsed="0.006566"/>
</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="PASS" start="2026-10-06T01:29:15.774180" elapsed="0.114175"/>
</kw>
<msg time="2026-10-06T01:29:15.888437" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:15.888477" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:15.773526" elapsed="0.114986"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:15.888715" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:29:15.888583" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.888565" elapsed="0.000261"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:29:15.889168" elapsed="0.000024"/>
</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-10-06T01:29:15.889487" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:15.889552" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:29:15.772842" elapsed="0.116795"/>
</kw>
<msg time="2026-10-06T01:29:15.889850" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:15.889892" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:15.770930" elapsed="0.118998"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:15.890219" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:15.889997" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.889981" elapsed="0.000326"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:15.770789" elapsed="0.119539"/>
</iter>
<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-10-06T01:29:15.892967" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:15.892880" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.892863" elapsed="0.000167"/>
</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-10-06T01:29:15.894278" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:15.894169" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:15.894152" elapsed="0.000190"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:15.894731" level="INFO">${karaf_connection_index} = 390</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-10-06T01:29:15.894486" elapsed="0.000270"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:15.895098" 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-10-06T01:29:15.894918" elapsed="0.000205"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:15.930246" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:15.895737" elapsed="0.034714"/>
</kw>
<msg time="2026-10-06T01:29:15.930616" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:15.930659" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:15.895296" elapsed="0.035418"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:16.018286" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:15.931349" elapsed="0.087203"/>
</kw>
<msg time="2026-10-06T01:29:16.018793" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:16.018836" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:15.930893" elapsed="0.087979"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.019333" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.019000" elapsed="0.000412"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.018954" elapsed="0.000491"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.020090" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.019633" elapsed="0.000546"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.020492" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.020258" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.020240" elapsed="0.000378"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:16.020667" elapsed="0.000083"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:16.023834" elapsed="0.000548"/>
</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-10-06T01:29:16.025627" elapsed="0.000535"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:16.027608" elapsed="0.000335"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:16.021807" elapsed="0.006206"/>
</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-10-06T01:29:16.021118" elapsed="0.007015"/>
</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="PASS" start="2026-10-06T01:29:15.893857" elapsed="0.134358"/>
</kw>
<msg time="2026-10-06T01:29:16.028331" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:16.028373" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:15.893180" elapsed="0.135230"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:16.028567" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:16.028482" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.028465" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.029074" elapsed="0.000024"/>
</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-10-06T01:29:16.029472" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:16.029538" 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="PASS" start="2026-10-06T01:29:15.892563" elapsed="0.137067"/>
</kw>
<msg time="2026-10-06T01:29:16.029738" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:16.029779" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:15.890578" elapsed="0.139236"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.030105" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.029887" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.029870" elapsed="0.000307"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:15.890440" elapsed="0.139758"/>
</iter>
<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-10-06T01:29:16.032990" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:16.032904" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.032887" elapsed="0.000167"/>
</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-10-06T01:29:16.034171" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:16.034087" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.034070" elapsed="0.000186"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:16.034652" level="INFO">${karaf_connection_index} = 392</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-10-06T01:29:16.034413" elapsed="0.000280"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:16.035042" 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-10-06T01:29:16.034856" elapsed="0.000210"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:16.068861" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:16.035646" elapsed="0.033410"/>
</kw>
<msg time="2026-10-06T01:29:16.069243" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:16.069286" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:16.035217" elapsed="0.034105"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:16.146046" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:16.069999" elapsed="0.076386"/>
</kw>
<msg time="2026-10-06T01:29:16.146643" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:16.146713" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:16.069508" elapsed="0.077243"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.147292" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.146908" elapsed="0.000464"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.146852" elapsed="0.000557"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.148110" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "n "d "[C "V "[78Ce "[A[78Cr
 "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.147603" elapsed="0.000592"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.148472" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.148273" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.148255" elapsed="0.000309"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:16.148604" elapsed="0.000049"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:16.151518" elapsed="0.000510"/>
</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-10-06T01:29:16.153282" elapsed="0.000570"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:16.155171" elapsed="0.000331"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:16.149737" elapsed="0.005836"/>
</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-10-06T01:29:16.149095" elapsed="0.006614"/>
</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="PASS" start="2026-10-06T01:29:16.033827" elapsed="0.121964"/>
</kw>
<msg time="2026-10-06T01:29:16.155882" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:16.155923" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:16.033203" elapsed="0.122757"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:16.156121" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:16.156034" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.156016" elapsed="0.000184"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.156569" elapsed="0.000024"/>
</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-10-06T01:29:16.156978" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:16.157043" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:29:16.032578" elapsed="0.124557"/>
</kw>
<msg time="2026-10-06T01:29:16.157238" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:16.157282" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:16.030499" elapsed="0.126824"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.157618" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.157396" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.157380" elapsed="0.000325"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:16.030355" elapsed="0.127372"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:15.770633" elapsed="0.387133"/>
</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-10-06T01:29:15.768407" elapsed="0.389424"/>
</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-10-06T01:29:15.766163" elapsed="0.391728"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:15.765758" elapsed="0.392180"/>
</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-10-06T01:29:15.764471" elapsed="0.393523"/>
</kw>
<kw name="Add Sample Port To The Manual Bridge And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.161873" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.161618" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.161601" elapsed="0.000347"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:16.162292" 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-10-06T01:29:16.162388" 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-10-06T01:29:16.162140" elapsed="0.000273"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.162907" level="INFO">Attempting to execute command "sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan" on remote system "10.30.170.234" 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-10-06T01:29:16.162599" elapsed="0.000390"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:16.163497" level="INFO">${conn_id} = 526</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-10-06T01:29:16.163166" elapsed="0.000356"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.164383" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:29:16.164453" 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-10-06T01:29:16.164090" elapsed="0.000385"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:16.164623" elapsed="0.000300"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:29:16.165708" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:29:16.546982" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:29:15 UTC 2026

  System load:  0.0                Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:29:15 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:29:16.165462" elapsed="0.381703"/>
</kw>
<msg time="2026-10-06T01:29:16.547270" 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-10-06T01:29:16.165083" elapsed="0.382282"/>
</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-10-06T01:29:16.163732" elapsed="0.383760"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:29:16.548120" level="INFO">Executing command 'sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan'.</msg>
<msg time="2026-10-06T01:29:16.591270" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:29:16.591510" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:29:16.591598" level="INFO">${stderr} = ovs-vsctl: Error detected while setting up 'vx1': vx1: vxlan type requires valid 'remote_ip' argument.  See ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/var/log/openvswitch"...</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-10-06T01:29:16.547834" elapsed="0.043815"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:16.592032" elapsed="0.000435"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.593634" level="INFO">ovs-vsctl: Error detected while setting up 'vx1': vx1: vxlan type requires valid 'remote_ip' argument.  See ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/var/log/openvswitch".</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.593011" elapsed="0.000756"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:16.594184" elapsed="0.000056"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:16.593943" elapsed="0.000367"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.593886" elapsed="0.000476"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:29:16.594648" elapsed="0.000084"/>
</return>
<status status="PASS" start="2026-10-06T01:29:16.594470" elapsed="0.000331"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.594440" elapsed="0.000410"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:16.594918" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:16.596550" elapsed="0.000663"/>
</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-10-06T01:29:16.597637" elapsed="0.000344"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:16.598315" elapsed="0.000192"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:16.595595" elapsed="0.003013"/>
</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-10-06T01:29:16.161181" elapsed="0.437607"/>
</kw>
<msg time="2026-10-06T01:29:16.598894" 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-10-06T01:29:16.160645" elapsed="0.438347"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:29:16.160196" elapsed="0.439073"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.600425" level="INFO">${dictionary_operational} = {'vx1': '2'}</msg>
<var>${dictionary_operational}</var>
<arg>vx1=2</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:29:16.599740" elapsed="0.000740"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.601559" level="INFO">${dictionary_config} = {'vx1': '0'}</msg>
<var>${dictionary_config}</var>
<arg>vx1=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:29:16.600928" elapsed="0.000687"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.611609" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:16.610862" elapsed="0.000802"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.612666" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:16.612033" elapsed="0.000716"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:16.612840" elapsed="0.000059"/>
</return>
<msg time="2026-10-06T01:29:16.613116" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:16.610022" elapsed="0.003144"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.616972" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:29:16.616571" elapsed="0.000436"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:16.617064" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:29:16.617245" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:16.616107" elapsed="0.001171"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.618952" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.618618" elapsed="0.000393"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.619588" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.619285" elapsed="0.000357"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:16.627995" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:16.628200" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '144'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:29:16.628369" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:16.620067" elapsed="0.008343"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.619750" elapsed="0.008727"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.628803" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.628519" elapsed="0.000370"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.619726" elapsed="0.009194"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.630794" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.630310" elapsed="0.000553"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.629965" elapsed="0.000943"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.629940" elapsed="0.000999"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.631750" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.631352" elapsed="0.000457"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.631010" elapsed="0.000843"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.630988" elapsed="0.000896"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.632763" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:16.632123" elapsed="0.000678"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.633487" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.633149" elapsed="0.000416"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.634264" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:16.633854" elapsed="0.000446"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.633598" elapsed="0.000750"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.633119" elapsed="0.001259"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.635143" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:16.634625" elapsed="0.000554"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.635587" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.635292" elapsed="0.000372"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.636364" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:16.635958" elapsed="0.000442"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.635727" elapsed="0.000721"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.635267" elapsed="0.001211"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:16.636705" elapsed="0.000429"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:29:16.637771" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:16.637383" elapsed="0.000424"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:29:16.638028" elapsed="0.000332"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:29:16.629449" elapsed="0.008992"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:29:16.638651" elapsed="0.000058"/>
</return>
<status status="PASS" start="2026-10-06T01:29:16.638533" elapsed="0.000223"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.638508" elapsed="0.000280"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.638995" elapsed="0.000029"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:29:16.639088" elapsed="0.000021"/>
</return>
<msg time="2026-10-06T01:29:16.639419" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:29:16.617731" elapsed="0.021727"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:29:16.639524" elapsed="0.000039"/>
</return>
<msg time="2026-10-06T01:29:16.639722" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:29:16.615509" elapsed="0.024252"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.641311" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:16.640825" elapsed="0.000578"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:29:16.640560" elapsed="0.000896"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:29:16.640408" elapsed="0.001091"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:29:16.640058" elapsed="0.001512"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:16.613484" elapsed="0.028132"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.645357" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:16.644967" elapsed="0.000425"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:16.645450" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:29:16.645619" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:16.644502" elapsed="0.001148"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.647283" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.646960" elapsed="0.000428"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.648177" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.647651" elapsed="0.000603"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:16.663601" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01wo4j9u7mox61tr0ncscuykk72.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:16.663782" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:29:16.663906" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:16.648659" elapsed="0.015282"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.648344" elapsed="0.015651"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.664261" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.664029" elapsed="0.000334"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.648319" elapsed="0.016079"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.666330" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.665829" elapsed="0.000565"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.665462" elapsed="0.000980"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.665437" elapsed="0.001038"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.667333" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.666921" elapsed="0.000474"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.666552" elapsed="0.000890"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.666529" elapsed="0.000947"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.668277" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:16.667748" elapsed="0.000567"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.668731" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.668410" elapsed="0.000400"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.669482" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:16.669075" elapsed="0.000443"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.668842" elapsed="0.000725"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.668386" elapsed="0.001210"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.670381" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:16.669866" elapsed="0.000552"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.670832" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.670513" elapsed="0.000397"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.671571" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:16.671173" elapsed="0.000434"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.670943" elapsed="0.000712"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.670489" elapsed="0.001216"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:16.671914" elapsed="0.000446"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:29:16.672940" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:16.672591" elapsed="0.000385"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:29:16.673198" elapsed="0.000323"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:29:16.664942" elapsed="0.008662"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:29:16.673836" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-10-06T01:29:16.673716" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.673671" elapsed="0.000326"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.674209" elapsed="0.000049"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:29:16.674327" elapsed="0.000022"/>
</return>
<msg time="2026-10-06T01:29:16.674643" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:29:16.646080" elapsed="0.028626"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:29:16.674776" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:29:16.674957" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:29:16.643911" elapsed="0.031081"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.676519" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:16.676048" elapsed="0.000560"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:29:16.675815" elapsed="0.000847"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:29:16.675640" elapsed="0.001084"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:29:16.675306" elapsed="0.001491"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:16.641759" elapsed="0.035084"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.680668" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:16.680293" elapsed="0.000432"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:16.680784" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:29:16.680953" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:16.679830" elapsed="0.001155"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.682608" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.682298" elapsed="0.000369"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.683269" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.682947" elapsed="0.000379"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:16.694110" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node08kx9y5d080lbj5jl4gkt6rg2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:16.694271" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:29:16.694416" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:16.683744" elapsed="0.010714"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.683412" elapsed="0.011113"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.694842" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.694567" elapsed="0.000363"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.683388" elapsed="0.011572"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.696791" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.696312" elapsed="0.000539"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.695956" elapsed="0.000939"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.695932" elapsed="0.000994"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.697734" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.697339" elapsed="0.000453"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.696997" elapsed="0.000838"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.696976" elapsed="0.000891"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.698599" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:16.698101" elapsed="0.000533"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.699029" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.698746" elapsed="0.000403"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.699816" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:16.699422" elapsed="0.000429"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.699185" elapsed="0.000713"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.698721" elapsed="0.001205"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.700656" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:16.700158" elapsed="0.000554"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.701086" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.700804" elapsed="0.000356"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.701809" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:16.701424" elapsed="0.000419"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.701191" elapsed="0.000700"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.700781" elapsed="0.001138"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:16.702113" elapsed="0.000427"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:29:16.703081" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:16.702778" elapsed="0.000338"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:29:16.703338" elapsed="0.000290"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:29:16.695456" elapsed="0.008271"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:29:16.703928" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-10-06T01:29:16.703815" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.703792" elapsed="0.000242"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.704242" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:29:16.704331" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:29:16.704625" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:29:16.681415" elapsed="0.023244"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:29:16.704752" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:29:16.704924" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:29:16.679232" elapsed="0.025725"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.706638" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:16.706194" elapsed="0.000550"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:29:16.705973" elapsed="0.000824"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:29:16.705827" elapsed="0.001007"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:29:16.705253" elapsed="0.001647"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:16.676960" elapsed="0.029983"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:16.613305" elapsed="0.093674"/>
</for>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:29:16.608913" elapsed="0.098131"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:29:16.602074" elapsed="0.105037"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.713262" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:16.712791" elapsed="0.000513"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.714009" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:16.713560" elapsed="0.000529"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:16.714154" elapsed="0.000040"/>
</return>
<msg time="2026-10-06T01:29:16.714383" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:16.712279" elapsed="0.002142"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.717452" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:29:16.717160" elapsed="0.000317"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:16.717518" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:29:16.717639" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:16.716843" elapsed="0.000818"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.718833" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.718596" elapsed="0.000278"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.719288" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.719061" elapsed="0.000267"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:16.726239" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:16.726405" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '6049'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;41297796-b474-41c3-aa58-5893fab7fa6e&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;78c80c1f-dd63-431c-b6ee-002221615a09&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;f96bb8d6-692b-4c53-81c0-f250ff4f27c1&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;96:77:29:41:c3:41&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;14&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vx1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;419e0f17-cb78-4dcf-8e29-a7b369939327&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vx1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;b6cdb7ea-832c-41fb-9d54-1be03a288a80&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:96:77:29:41:c3:41&lt;/datapath-id&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:29:16.726593" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:16.719612" elapsed="0.007006"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.719390" elapsed="0.007267"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.726855" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.726703" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.719373" elapsed="0.007561"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.728259" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;41297796-b474-41c3-aa58-5893fab7fa6e&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;78c80c1f-dd63-431c-b6ee-002221615a09&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;f96bb8d6-692b-4c53-81c0-f250ff4f27c1&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;96:77:29:41:c3:41&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;14&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vx1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;419e0f17-cb78-4dcf-8e29-a7b369939327&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vx1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;b6cdb7ea-832c-41fb-9d54-1be03a288a80&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:96:77:29:41:c3:41&lt;/datapath-id&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.727867" elapsed="0.000542"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.727611" elapsed="0.000831"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.727594" elapsed="0.000870"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.729035" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.728765" elapsed="0.000311"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.728516" elapsed="0.000592"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.728500" elapsed="0.000631"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.731246" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:16.729313" elapsed="0.001960"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.731545" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.731339" elapsed="0.000259"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.732057" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:16.731791" elapsed="0.000290"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.731620" elapsed="0.000495"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.731322" elapsed="0.000813"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.732654" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:16.732313" elapsed="0.000380"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.732960" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.732759" elapsed="0.000253"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.733466" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:16.733189" elapsed="0.000301"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.733034" elapsed="0.000489"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.732742" elapsed="0.000800"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:16.733695" elapsed="0.000291"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:29:16.734376" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:16.734140" elapsed="0.000260"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:29:16.734546" elapsed="0.000224"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:29:16.727265" elapsed="0.007561"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:29:16.734967" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:16.734888" elapsed="0.000135"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.734871" elapsed="0.000175"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.735182" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:29:16.735258" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:29:16.735530" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:29:16.717973" elapsed="0.017585"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:29:16.735602" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:29:16.735739" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:29:16.716420" elapsed="0.019346"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.736940" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:16.736463" elapsed="0.000565"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:29:16.736304" elapsed="0.000761"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:29:16.736188" elapsed="0.000904"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:29:16.735966" elapsed="0.001174"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:16.714660" elapsed="0.022542"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.739733" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:16.739445" elapsed="0.000314"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:16.739801" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:29:16.739924" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:16.739111" elapsed="0.000836"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.741097" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.740877" elapsed="0.000261"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.741556" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.741337" elapsed="0.000259"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:16.751740" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01wo4j9u7mox61tr0ncscuykk72.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:16.751898" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2679'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"41297796-b474-41c3-aa58-5893fab7fa6e","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"78c80c1f-dd63-431c-b6ee-002221615a09","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"f96bb8d6-692b-4c53-81c0-f250ff4f27c1","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"96:77:29:41:c3:41","ovsdb:ofport":65534,"ovsdb:ifindex":14},{"tp-id":"vx1","ovsdb:port-uuid":"419e0f17-cb78-4dcf-8e29-a7b369939327","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"b6cdb7ea-832c-41fb-9d54-1be03a288a80","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:96:77:29:41:c3:41"}]}]}} 
 </msg>
<msg time="2026-10-06T01:29:16.752005" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:16.741895" elapsed="0.010135"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.741657" elapsed="0.010413"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.752268" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.752096" elapsed="0.000234"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.741640" elapsed="0.010711"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.753701" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"41297796-b474-41c3-aa58-5893fab7fa6e","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"78c80c1f-dd63-431c-b6ee-002221615a09","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"f96bb8d6-692b-4c53-81c0-f250ff4f27c1","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"96:77:29:41:c3:41","ovsdb:ofport":65534,"ovsdb:ifindex":14},{"tp-id":"vx1","ovsdb:port-uuid":"419e0f17-cb78-4dcf-8e29-a7b369939327","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"b6cdb7ea-832c-41fb-9d54-1be03a288a80","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:96:77:29:41:c3:41"}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.753302" elapsed="0.000494"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.753048" elapsed="0.000780"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.753030" elapsed="0.000821"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.798819" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.754138" elapsed="0.044756"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.753901" elapsed="0.045052"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.753885" elapsed="0.045107"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.799771" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:16.799263" elapsed="0.000533"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.800110" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.799883" elapsed="0.000280"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.800638" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:16.800367" elapsed="0.000295"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.800186" elapsed="0.000526"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.799857" elapsed="0.000877"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.801262" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:16.800903" elapsed="0.000385"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.801555" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.801352" elapsed="0.000254"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.802070" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:16.801803" elapsed="0.000291"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.801629" elapsed="0.000499"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.801335" elapsed="0.000814"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:16.802323" elapsed="0.000301"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:29:16.803054" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:16.802799" elapsed="0.000278"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:29:16.803242" elapsed="0.000219"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:29:16.752694" elapsed="0.050836"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:29:16.803700" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-10-06T01:29:16.803596" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.803579" elapsed="0.000221"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.803943" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:29:16.804006" elapsed="0.000013"/>
</return>
<msg time="2026-10-06T01:29:16.804345" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:29:16.740254" elapsed="0.064118"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:29:16.804418" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:29:16.804543" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:29:16.738698" elapsed="0.065869"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.805721" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:16.805383" elapsed="0.000416"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:29:16.805206" elapsed="0.000629"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:29:16.805085" elapsed="0.000780"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:29:16.804818" elapsed="0.001096"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:16.737298" elapsed="0.068718"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.808711" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:16.808422" elapsed="0.000315"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:16.808780" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:29:16.808903" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:16.808027" elapsed="0.000900"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.810110" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.809888" elapsed="0.000265"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.810574" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.810355" elapsed="0.000259"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:16.822019" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node08kx9y5d080lbj5jl4gkt6rg2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:16.822173" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2679'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"41297796-b474-41c3-aa58-5893fab7fa6e","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"78c80c1f-dd63-431c-b6ee-002221615a09","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"f96bb8d6-692b-4c53-81c0-f250ff4f27c1","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"96:77:29:41:c3:41","ovsdb:ofport":65534,"ovsdb:ifindex":14},{"tp-id":"vx1","ovsdb:port-uuid":"419e0f17-cb78-4dcf-8e29-a7b369939327","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"b6cdb7ea-832c-41fb-9d54-1be03a288a80","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:96:77:29:41:c3:41"}]}]}} 
 </msg>
<msg time="2026-10-06T01:29:16.822298" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:16.810916" elapsed="0.011407"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.810675" elapsed="0.011692"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.822544" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.822392" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.810658" elapsed="0.011965"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.823972" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"41297796-b474-41c3-aa58-5893fab7fa6e","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"78c80c1f-dd63-431c-b6ee-002221615a09","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"f96bb8d6-692b-4c53-81c0-f250ff4f27c1","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"96:77:29:41:c3:41","ovsdb:ofport":65534,"ovsdb:ifindex":14},{"tp-id":"vx1","ovsdb:port-uuid":"419e0f17-cb78-4dcf-8e29-a7b369939327","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"b6cdb7ea-832c-41fb-9d54-1be03a288a80","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:96:77:29:41:c3:41"}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.823584" elapsed="0.000494"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.823329" elapsed="0.000782"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.823309" elapsed="0.000826"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.824731" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.824442" elapsed="0.000332"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.824188" elapsed="0.000617"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.824172" elapsed="0.000657"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.825370" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:16.825001" elapsed="0.000395"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.825665" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.825461" elapsed="0.000275"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.826179" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:16.825915" elapsed="0.000289"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.825759" elapsed="0.000490"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.825444" elapsed="0.000827"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.826796" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:16.826441" elapsed="0.000380"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.827086" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.826885" elapsed="0.000254"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.827594" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:16.827331" elapsed="0.000287"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:16.827161" elapsed="0.000490"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.826868" elapsed="0.000804"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:16.827830" elapsed="0.000538"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:29:16.828769" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:16.828530" elapsed="0.000264"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:29:16.828943" elapsed="0.000209"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:29:16.822963" elapsed="0.006244"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:29:16.829368" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:16.829286" elapsed="0.000137"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.829269" elapsed="0.000176"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.829582" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:29:16.829644" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:29:16.829923" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:29:16.809253" elapsed="0.020696"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:29:16.829995" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:29:16.830116" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:29:16.807586" elapsed="0.022554"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.831166" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:16.830862" elapsed="0.000392"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:29:16.830702" elapsed="0.000588"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:29:16.830584" elapsed="0.000733"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:29:16.830361" elapsed="0.001002"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:16.806102" elapsed="0.025334"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:16.714501" elapsed="0.116963"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:29:16.711584" elapsed="0.119929"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:29:16.707409" elapsed="0.124155"/>
</kw>
<doc>Add Port vx1 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:29:16.159820" elapsed="0.671802"/>
</kw>
<doc>Add port with OVS command and verify it gets applied from all instances.</doc>
<status status="PASS" start="2026-10-06T01:29:15.763915" elapsed="1.067831"/>
</test>
<test id="s1-s2-s1-t32" name="Create Tap Device After Recover" line="158">
<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-10-06T01:29:16.833412" elapsed="0.000198"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:29:16.833134" elapsed="0.000527"/>
</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-10-06T01:29:16.834998" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:16.834905" elapsed="0.000136"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.834886" elapsed="0.000176"/>
</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-10-06T01:29:16.837126" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:16.837042" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.837025" elapsed="0.000163"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.838112" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:16.837783" elapsed="0.000355"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.838576" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:16.838301" elapsed="0.000300"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:16.838642" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:29:16.838784" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:16.837413" elapsed="0.001395"/>
</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-10-06T01:29:16.841180" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:16.841096" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.841078" elapsed="0.000177"/>
</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-10-06T01:29:16.842404" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:16.842320" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.842304" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:16.842865" level="INFO">${karaf_connection_index} = 388</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-10-06T01:29:16.842609" elapsed="0.000281"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:16.843251" 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-10-06T01:29:16.843051" elapsed="0.000225"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:16.874617" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:16.843866" elapsed="0.030952"/>
</kw>
<msg time="2026-10-06T01:29:16.874981" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:16.875021" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:16.843429" elapsed="0.031627"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:16.931345" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "A "f "t "e "r "[78C[C "[A[78CR
 "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:16.875667" elapsed="0.055858"/>
</kw>
<msg time="2026-10-06T01:29:16.931739" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:16.931782" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:16.875233" elapsed="0.056585"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.932097" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.931890" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.931871" elapsed="0.000321"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:16.932744" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "A "f "t "e "r "[78C[C "[A[78CR
 "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:16.932389" elapsed="0.000434"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.933081" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.932885" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.932868" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:16.933204" elapsed="0.000038"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:16.935740" elapsed="0.000622"/>
</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-10-06T01:29:16.937657" elapsed="0.000507"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:16.939403" elapsed="0.000361"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:16.934011" elapsed="0.005821"/>
</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-10-06T01:29:16.933490" elapsed="0.006462"/>
</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="PASS" start="2026-10-06T01:29:16.842046" elapsed="0.097983"/>
</kw>
<msg time="2026-10-06T01:29:16.940112" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:16.940153" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:16.841407" elapsed="0.098781"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:16.940359" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:16.940275" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.940257" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:29:16.941014" elapsed="0.000025"/>
</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-10-06T01:29:16.941334" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:16.941400" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:29:16.840809" elapsed="0.100675"/>
</kw>
<msg time="2026-10-06T01:29:16.941566" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:16.941606" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:16.839129" elapsed="0.102512"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:16.941940" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:16.941724" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.941708" elapsed="0.000304"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:16.838991" elapsed="0.103041"/>
</iter>
<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-10-06T01:29:16.944406" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:16.944321" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.944304" elapsed="0.000165"/>
</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-10-06T01:29:16.945808" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:16.945664" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:16.945647" elapsed="0.000227"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:16.946260" level="INFO">${karaf_connection_index} = 390</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-10-06T01:29:16.946018" elapsed="0.000268"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:16.946625" 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-10-06T01:29:16.946447" elapsed="0.000201"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:16.978960" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:16.947243" elapsed="0.031909"/>
</kw>
<msg time="2026-10-06T01:29:16.979326" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:16.979368" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:16.946819" elapsed="0.032584"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:17.037561" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "A "f "t "e "r "[78C[C "[A[78CR
 "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:16.980010" elapsed="0.057750"/>
</kw>
<msg time="2026-10-06T01:29:17.037919" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:17.037959" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:16.979568" elapsed="0.058426"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:17.038284" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:17.038065" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:17.038047" elapsed="0.000332"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:17.038917" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "A "f "t "e "r "[78C[C "[A[78CR
 "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:17.038560" elapsed="0.000437"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:17.039269" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:17.039058" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:17.039042" elapsed="0.000321"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:17.039393" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:17.041889" elapsed="0.000487"/>
</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-10-06T01:29:17.043609" elapsed="0.000640"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:17.045613" elapsed="0.000326"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:17.040182" elapsed="0.005822"/>
</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-10-06T01:29:17.039665" elapsed="0.006454"/>
</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="PASS" start="2026-10-06T01:29:16.945405" elapsed="0.100789"/>
</kw>
<msg time="2026-10-06T01:29:17.046289" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:17.046334" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:16.944616" elapsed="0.101753"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:17.046523" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:17.046438" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:17.046421" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:17.046987" elapsed="0.000024"/>
</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-10-06T01:29:17.047340" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:17.047406" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:29:16.944018" elapsed="0.103473"/>
</kw>
<msg time="2026-10-06T01:29:17.047574" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:17.047614" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:16.942292" elapsed="0.105357"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:17.047952" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:17.047734" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:17.047718" elapsed="0.000305"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:16.942141" elapsed="0.105903"/>
</iter>
<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-10-06T01:29:17.050503" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:17.050419" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:17.050401" elapsed="0.000165"/>
</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-10-06T01:29:17.051663" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:17.051579" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:17.051562" elapsed="0.000189"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:17.052117" level="INFO">${karaf_connection_index} = 392</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-10-06T01:29:17.051893" elapsed="0.000249"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:17.052498" 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-10-06T01:29:17.052318" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:17.086483" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:17.053103" elapsed="0.033558"/>
</kw>
<msg time="2026-10-06T01:29:17.086859" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:17.086901" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:17.052691" elapsed="0.034245"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:17.162503" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "A "f "t "e "r "[78C[C "[A[78CR
 "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:17.087540" elapsed="0.075173"/>
</kw>
<msg time="2026-10-06T01:29:17.162877" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:17.162918" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:17.087100" elapsed="0.075853"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:17.163252" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:17.163028" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:17.163007" elapsed="0.000346"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:17.163898" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "T "a "p "[C "D "e "v "i "c "e "[C "A "f "t "e "r "[78C[C "[A[78CR
 "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:17.163532" elapsed="0.000446"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:17.164250" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:17.164039" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:17.164023" elapsed="0.000321"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:17.164375" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:17.166923" elapsed="0.000489"/>
</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-10-06T01:29:17.168634" elapsed="0.000640"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:17.170481" elapsed="0.000342"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:17.165224" elapsed="0.005666"/>
</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-10-06T01:29:17.164651" elapsed="0.006356"/>
</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="PASS" start="2026-10-06T01:29:17.051322" elapsed="0.119762"/>
</kw>
<msg time="2026-10-06T01:29:17.171167" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:17.171207" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:17.050734" elapsed="0.120523"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:17.171415" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:17.171329" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:17.171311" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:17.172116" elapsed="0.000025"/>
</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-10-06T01:29:17.172435" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:17.172500" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:29:17.050112" elapsed="0.122474"/>
</kw>
<msg time="2026-10-06T01:29:17.172669" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:17.172727" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:17.048302" elapsed="0.124461"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:17.173047" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:17.172831" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:17.172815" elapsed="0.000303"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:17.048152" elapsed="0.124987"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:16.838854" elapsed="0.334312"/>
</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-10-06T01:29:16.836746" elapsed="0.336486"/>
</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-10-06T01:29:16.834497" elapsed="0.338790"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:16.833825" elapsed="0.339505"/>
</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-10-06T01:29:16.832794" elapsed="0.340587"/>
</kw>
<kw name="Create Sample Tap Device" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:17.175574" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:17.175339" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:17.175318" elapsed="0.000330"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:17.175988" 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-10-06T01:29:17.176080" 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-10-06T01:29:17.175856" elapsed="0.000249"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:17.176589" level="INFO">Attempting to execute command "ip tuntap add mode tap vport1" on remote system "10.30.170.234" 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-10-06T01:29:17.176302" elapsed="0.000329"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:17.177167" level="INFO">${conn_id} = 531</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-10-06T01:29:17.176856" elapsed="0.000335"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:29:17.178032" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:29:17.178101" 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-10-06T01:29:17.177771" elapsed="0.000352"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:17.178285" elapsed="0.000290"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:29:17.179363" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:29:17.559175" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:29:15 UTC 2026

  System load:  0.0                Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:29:16 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:29:17.179118" elapsed="0.380185"/>
</kw>
<msg time="2026-10-06T01:29:17.559377" 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-10-06T01:29:17.178753" elapsed="0.380700"/>
</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-10-06T01:29:17.177396" elapsed="0.382151"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:29:17.559997" level="INFO">Executing command 'ip tuntap add mode tap vport1'.</msg>
<msg time="2026-10-06T01:29:17.572690" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-10-06T01:29:17.572804" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:29:17.572844" level="INFO">${stderr} = ioctl(TUNSETIFF): Operation not permitted</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-10-06T01:29:17.559800" elapsed="0.013066"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:17.573024" elapsed="0.000227"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:17.573905" level="INFO">ioctl(TUNSETIFF): Operation not permitted</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:17.573528" elapsed="0.000435"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:17.574231" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:17.574068" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:17.574033" elapsed="0.000298"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:29:17.574515" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:29:17.574399" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:17.574379" elapsed="0.000243"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:17.574664" elapsed="0.000038"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:17.575712" elapsed="0.000396"/>
</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-10-06T01:29:17.576377" elapsed="0.000194"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:17.576784" elapsed="0.000125"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:17.575095" elapsed="0.001880"/>
</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-10-06T01:29:17.174902" elapsed="0.402167"/>
</kw>
<msg time="2026-10-06T01:29:17.577134" 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-10-06T01:29:17.174363" elapsed="0.402834"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ip tuntap add mode tap vport1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:29:17.173938" elapsed="0.403376"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:17.579942" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:17.579592" elapsed="0.000422"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:17.579567" elapsed="0.000478"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:17.580499" 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-10-06T01:29:17.580629" 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-10-06T01:29:17.580323" elapsed="0.000340"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:17.581367" level="INFO">Attempting to execute command "ip tuntap add mode tap vport2" on remote system "10.30.170.234" 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-10-06T01:29:17.580946" elapsed="0.000482"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:17.582105" level="INFO">${conn_id} = 533</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-10-06T01:29:17.581669" elapsed="0.000469"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:29:17.583295" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:29:17.583397" 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-10-06T01:29:17.582934" elapsed="0.000494"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:17.583631" elapsed="0.000411"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:29:17.585124" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:29:17.979232" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:29:15 UTC 2026

  System load:  0.0                Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:29:17 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:29:17.584804" elapsed="0.394529"/>
</kw>
<msg time="2026-10-06T01:29:17.979395" 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-10-06T01:29:17.584280" elapsed="0.395178"/>
</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-10-06T01:29:17.582418" elapsed="0.397126"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:29:17.979958" level="INFO">Executing command 'ip tuntap add mode tap vport2'.</msg>
<msg time="2026-10-06T01:29:17.993122" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-10-06T01:29:17.993284" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:29:17.993340" level="INFO">${stderr} = ioctl(TUNSETIFF): Operation not permitted</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-10-06T01:29:17.979779" elapsed="0.013591"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:17.993592" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:17.994552" level="INFO">ioctl(TUNSETIFF): Operation not permitted</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:17.994195" elapsed="0.000414"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:17.994873" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:17.994728" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:17.994695" elapsed="0.000272"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:29:17.995144" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:29:17.995032" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:17.995014" elapsed="0.000253"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:17.995310" elapsed="0.000018"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:17.996315" elapsed="0.000420"/>
</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-10-06T01:29:17.996986" elapsed="0.000192"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:17.997387" elapsed="0.000186"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:17.995730" elapsed="0.001910"/>
</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-10-06T01:29:17.578985" elapsed="0.418776"/>
</kw>
<msg time="2026-10-06T01:29:17.997827" 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-10-06T01:29:17.578163" elapsed="0.419727"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ip tuntap add mode tap vport2</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:29:17.577557" elapsed="0.420431"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:18.000559" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:18.000231" elapsed="0.000399"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:18.000191" elapsed="0.000471"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:18.001122" 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-10-06T01:29:18.001266" 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-10-06T01:29:18.000950" elapsed="0.000351"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:18.001999" level="INFO">Attempting to execute command "ifconfig vport1 up" on remote system "10.30.170.234" 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-10-06T01:29:18.001571" elapsed="0.000488"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:18.002752" level="INFO">${conn_id} = 535</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-10-06T01:29:18.002317" elapsed="0.000470"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:29:18.003939" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:29:18.004035" 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-10-06T01:29:18.003571" elapsed="0.000495"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:18.004282" elapsed="0.000412"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:29:18.005789" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:29:18.412905" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:29:15 UTC 2026

  System load:  0.0                Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:29:17 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:29:18.005447" elapsed="0.407595"/>
</kw>
<msg time="2026-10-06T01:29:18.413118" 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-10-06T01:29:18.004918" elapsed="0.408275"/>
</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-10-06T01:29:18.003054" elapsed="0.410263"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:29:18.413828" level="INFO">Executing command 'ifconfig vport1 up'.</msg>
<msg time="2026-10-06T01:29:18.427070" level="INFO">Command exited with return code 255.</msg>
<msg time="2026-10-06T01:29:18.427193" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:29:18.427251" level="INFO">${stderr} = vport1: ERROR while getting interface flags: No such device</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-10-06T01:29:18.413584" elapsed="0.013690"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:18.427436" elapsed="0.000277"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:18.428254" level="INFO">vport1: ERROR while getting interface flags: No such device</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:18.427955" elapsed="0.000408"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:18.428575" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:18.428453" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:18.428422" elapsed="0.000229"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:29:18.428806" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:18.428720" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:18.428704" elapsed="0.000180"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:18.428916" elapsed="0.000013"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:18.429713" elapsed="0.000293"/>
</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-10-06T01:29:18.430192" elapsed="0.000187"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:18.430520" elapsed="0.000089"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:18.429251" elapsed="0.001405"/>
</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-10-06T01:29:17.999598" elapsed="0.431152"/>
</kw>
<msg time="2026-10-06T01:29:18.430798" 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-10-06T01:29:17.998863" elapsed="0.431982"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ifconfig vport1 up</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:29:17.998260" elapsed="0.432662"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:18.432807" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:18.432548" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:18.432529" elapsed="0.000354"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:18.433217" 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-10-06T01:29:18.433312" 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-10-06T01:29:18.433073" elapsed="0.000264"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:18.433828" level="INFO">Attempting to execute command "ifconfig vport2 up" on remote system "10.30.170.234" 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-10-06T01:29:18.433521" elapsed="0.000350"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:18.434366" level="INFO">${conn_id} = 537</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-10-06T01:29:18.434043" elapsed="0.000350"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:29:18.435238" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:29:18.435309" 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-10-06T01:29:18.434965" elapsed="0.000365"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:18.435476" elapsed="0.000494"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:29:18.436783" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:29:18.855395" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:29:15 UTC 2026

  System load:  0.0                Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:29:18 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:29:18.436535" elapsed="0.419015"/>
</kw>
<msg time="2026-10-06T01:29:18.855613" 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-10-06T01:29:18.436133" elapsed="0.419559"/>
</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-10-06T01:29:18.434588" elapsed="0.421194"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:29:18.856162" level="INFO">Executing command 'ifconfig vport2 up'.</msg>
<msg time="2026-10-06T01:29:18.869587" level="INFO">Command exited with return code 255.</msg>
<msg time="2026-10-06T01:29:18.869715" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:29:18.869757" level="INFO">${stderr} = vport2: ERROR while getting interface flags: No such device</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-10-06T01:29:18.855996" elapsed="0.013783"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:18.869939" elapsed="0.000247"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:18.870694" level="INFO">vport2: ERROR while getting interface flags: No such device</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:18.870424" elapsed="0.000314"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:18.870913" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:18.870810" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:18.870787" elapsed="0.000195"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:29:18.871112" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:18.871029" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:18.871015" elapsed="0.000186"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:18.871234" elapsed="0.000013"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:18.871957" elapsed="0.000294"/>
</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-10-06T01:29:18.872432" elapsed="0.000142"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:18.872727" elapsed="0.000091"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:18.871531" elapsed="0.001332"/>
</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-10-06T01:29:18.432102" elapsed="0.440830"/>
</kw>
<msg time="2026-10-06T01:29:18.872978" 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-10-06T01:29:18.431544" elapsed="0.441480"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ifconfig vport2 up</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:29:18.431101" elapsed="0.441999"/>
</kw>
<doc>Create Tap Device vport1 and vport2 to add to the bridge br-s1 using OVS command.</doc>
<status status="PASS" start="2026-10-06T01:29:17.173583" elapsed="1.699571"/>
</kw>
<doc>Create tap devices to add to the bridge in ovs</doc>
<status status="PASS" start="2026-10-06T01:29:16.832190" elapsed="2.041096"/>
</test>
<test id="s1-s2-s1-t33" name="Add Tap Device Manually and Verify After Recover" line="162">
<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-10-06T01:29:18.875075" elapsed="0.000429"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:29:18.874821" elapsed="0.000736"/>
</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-10-06T01:29:18.876714" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:18.876607" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:18.876587" elapsed="0.000195"/>
</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-10-06T01:29:18.879133" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:18.879048" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:18.879031" elapsed="0.000178"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:18.880127" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:18.879794" elapsed="0.000359"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:18.880590" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:18.880317" elapsed="0.000297"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:18.880655" elapsed="0.000042"/>
</return>
<msg time="2026-10-06T01:29:18.880840" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:18.879419" elapsed="0.001444"/>
</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-10-06T01:29:18.883341" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:18.883255" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:18.883236" elapsed="0.000169"/>
</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-10-06T01:29:18.884587" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:18.884499" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:18.884482" elapsed="0.000168"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:18.885063" level="INFO">${karaf_connection_index} = 388</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-10-06T01:29:18.884816" elapsed="0.000272"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:18.885495" 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-10-06T01:29:18.885297" elapsed="0.000222"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:18.917140" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:18.886131" elapsed="0.031268"/>
</kw>
<msg time="2026-10-06T01:29:18.917583" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:18.917637" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:18.885671" elapsed="0.032026"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:18.999434" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:18.918385" elapsed="0.081244"/>
</kw>
<msg time="2026-10-06T01:29:18.999826" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:18.999868" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:18.917901" elapsed="0.082002"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.000204" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:18.999976" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:18.999956" elapsed="0.000346"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.000846" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.000486" elapsed="0.000445"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.001208" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.000992" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.000976" elapsed="0.000327"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:19.001333" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:19.004174" elapsed="0.000698"/>
</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-10-06T01:29:19.006160" elapsed="0.000498"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:19.008059" elapsed="0.000349"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:19.002157" elapsed="0.006319"/>
</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-10-06T01:29:19.001617" elapsed="0.006977"/>
</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="PASS" start="2026-10-06T01:29:18.884237" elapsed="0.124434"/>
</kw>
<msg time="2026-10-06T01:29:19.008896" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:19.008936" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:18.883550" elapsed="0.125421"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:19.009130" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:19.009044" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.009026" elapsed="0.000195"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:29:19.009557" elapsed="0.000023"/>
</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-10-06T01:29:19.009884" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:19.009951" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:29:18.882951" elapsed="0.127085"/>
</kw>
<msg time="2026-10-06T01:29:19.010120" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:19.010160" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:18.881247" elapsed="0.128962"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.010497" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.010279" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.010264" elapsed="0.000306"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:18.881092" elapsed="0.129499"/>
</iter>
<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-10-06T01:29:19.013125" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:19.013036" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.013018" elapsed="0.000169"/>
</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-10-06T01:29:19.014301" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:19.014213" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.014183" elapsed="0.000180"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:19.014758" level="INFO">${karaf_connection_index} = 390</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-10-06T01:29:19.014504" elapsed="0.000279"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:19.015124" 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-10-06T01:29:19.014944" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:19.049048" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:19.015746" elapsed="0.033503"/>
</kw>
<msg time="2026-10-06T01:29:19.049412" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:19.049453" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:19.015314" elapsed="0.034190"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:19.125322" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:19.050121" elapsed="0.075406"/>
</kw>
<msg time="2026-10-06T01:29:19.125716" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:19.125759" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:19.049670" elapsed="0.076125"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.126079" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.125870" elapsed="0.000387"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.125850" elapsed="0.000438"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.126839" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.126473" elapsed="0.000450"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.127182" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.126985" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.126968" elapsed="0.000324"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:19.127322" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:19.129873" elapsed="0.000493"/>
</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-10-06T01:29:19.131595" elapsed="0.003370"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:19.136172" elapsed="0.000337"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:19.128123" elapsed="0.008453"/>
</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-10-06T01:29:19.127593" elapsed="0.009119"/>
</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="PASS" start="2026-10-06T01:29:19.013940" elapsed="0.122852"/>
</kw>
<msg time="2026-10-06T01:29:19.136874" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:19.136913" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:19.013347" elapsed="0.123603"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:19.137107" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:19.137020" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.137003" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.137548" elapsed="0.000024"/>
</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-10-06T01:29:19.137877" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:19.137943" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:29:19.012747" elapsed="0.125281"/>
</kw>
<msg time="2026-10-06T01:29:19.138113" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:19.138152" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:19.010965" elapsed="0.127238"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.138495" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.138276" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.138260" elapsed="0.000306"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:19.010825" elapsed="0.127762"/>
</iter>
<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-10-06T01:29:19.141118" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:19.141033" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.141015" elapsed="0.000165"/>
</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-10-06T01:29:19.142308" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:19.142221" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.142178" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:19.142768" level="INFO">${karaf_connection_index} = 392</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-10-06T01:29:19.142515" elapsed="0.000278"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:19.143174" 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-10-06T01:29:19.142990" elapsed="0.000224"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:19.175072" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:19.143801" elapsed="0.031470"/>
</kw>
<msg time="2026-10-06T01:29:19.175456" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:19.175499" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:19.143369" elapsed="0.032166"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:19.247063" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:19.176143" elapsed="0.071139"/>
</kw>
<msg time="2026-10-06T01:29:19.247455" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:19.247496" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:19.175719" elapsed="0.071812"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.247849" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.247608" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.247587" elapsed="0.000358"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.248484" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "A "d "d "[C "T "a "p "[C "D "e "v "i "c "e "[C "M "a "n "u "a "l "l "y "[78C[C "[A[78Ca
 "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.248129" elapsed="0.000439"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.248844" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.248629" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.248612" elapsed="0.000326"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:19.248968" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:19.251519" elapsed="0.000506"/>
</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-10-06T01:29:19.253271" elapsed="0.000492"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:19.255163" elapsed="0.000490"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:19.249809" elapsed="0.005932"/>
</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-10-06T01:29:19.249281" elapsed="0.006577"/>
</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="PASS" start="2026-10-06T01:29:19.141937" elapsed="0.113998"/>
</kw>
<msg time="2026-10-06T01:29:19.256018" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:19.256059" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:19.141345" elapsed="0.114749"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:19.256267" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:19.256165" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.256148" elapsed="0.000198"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.256661" elapsed="0.000074"/>
</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-10-06T01:29:19.257017" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:19.257082" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:29:19.140740" elapsed="0.116493"/>
</kw>
<msg time="2026-10-06T01:29:19.257319" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:19.257359" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:19.138921" elapsed="0.118473"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.257793" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.257470" elapsed="0.000375"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.257454" elapsed="0.000413"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:19.138781" elapsed="0.119107"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:18.880926" elapsed="0.376994"/>
</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-10-06T01:29:18.878746" elapsed="0.379230"/>
</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-10-06T01:29:18.876341" elapsed="0.381687"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:18.875889" elapsed="0.382183"/>
</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-10-06T01:29:18.874436" elapsed="0.383687"/>
</kw>
<kw name="Add Sample Tap Device To The Manual Bridge And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.261603" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.261371" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.261354" elapsed="0.000344"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:19.262021" 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-10-06T01:29:19.262112" 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-10-06T01:29:19.261890" elapsed="0.000247"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.262623" level="INFO">Attempting to execute command "sudo ovs-vsctl add-port br-s1 vport1 -- add-port br-s1 vport2" on remote system "10.30.170.234" 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-10-06T01:29:19.262334" elapsed="0.000331"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:19.263171" level="INFO">${conn_id} = 542</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-10-06T01:29:19.262867" elapsed="0.000345"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.264047" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:29:19.264116" 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-10-06T01:29:19.263781" elapsed="0.000357"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:19.264302" elapsed="0.000280"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:29:19.265366" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:29:19.664343" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:29:15 UTC 2026

  System load:  0.0                Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:29:18 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:29:19.265118" elapsed="0.399347"/>
</kw>
<msg time="2026-10-06T01:29:19.664541" 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-10-06T01:29:19.264756" elapsed="0.399876"/>
</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-10-06T01:29:19.263410" elapsed="0.401422"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:29:19.665299" level="INFO">Executing command 'sudo ovs-vsctl add-port br-s1 vport1 -- add-port br-s1 vport2'.</msg>
<msg time="2026-10-06T01:29:19.728918" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:29:19.729153" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:29:19.729272" level="INFO">${stderr} = ovs-vsctl: Error detected while setting up 'vport1': could not open network device vport1 (No such device).  See ovs-vswitchd log for details.
ovs-vsctl: Error detected while setting up 'vport2': coul...</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-10-06T01:29:19.665087" elapsed="0.064239"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:19.729672" elapsed="0.000533"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.731326" level="INFO">ovs-vsctl: Error detected while setting up 'vport1': could not open network device vport1 (No such device).  See ovs-vswitchd log for details.
ovs-vsctl: Error detected while setting up 'vport2': could not open network device vport2 (No such device).  See ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/var/log/openvswitch".</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.730734" elapsed="0.000691"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:19.731871" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:19.731594" elapsed="0.000382"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.731540" elapsed="0.000487"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:29:19.732351" elapsed="0.000057"/>
</return>
<status status="PASS" start="2026-10-06T01:29:19.732135" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.732104" elapsed="0.000425"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:19.732598" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:19.734290" elapsed="0.000667"/>
</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-10-06T01:29:19.735390" elapsed="0.000350"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:19.736049" elapsed="0.000222"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:19.733312" elapsed="0.003068"/>
</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-10-06T01:29:19.260942" elapsed="0.475599"/>
</kw>
<msg time="2026-10-06T01:29:19.736649" 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-10-06T01:29:19.260412" elapsed="0.476373"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-port br-s1 vport1 -- add-port br-s1 vport2</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:29:19.259958" elapsed="0.476996"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.738142" level="INFO">${dictionary_operational} = {'vport1': '2', 'vport2': '2'}</msg>
<var>${dictionary_operational}</var>
<arg>vport1=2</arg>
<arg>vport2=2</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:29:19.737409" elapsed="0.000811"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.739351" level="INFO">${dictionary_config} = {'vport1': '0', 'vport2': '0'}</msg>
<var>${dictionary_config}</var>
<arg>vport1=0</arg>
<arg>vport2=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:29:19.738647" elapsed="0.000758"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.749566" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:19.748810" elapsed="0.000813"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.750613" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:19.749989" elapsed="0.000677"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:19.750786" elapsed="0.000060"/>
</return>
<msg time="2026-10-06T01:29:19.751068" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:19.747968" elapsed="0.003150"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.757150" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:29:19.756505" elapsed="0.000769"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:19.757435" elapsed="0.000039"/>
</return>
<msg time="2026-10-06T01:29:19.757613" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:19.755764" elapsed="0.001881"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.759323" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.758995" elapsed="0.000386"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.759971" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.759641" elapsed="0.000386"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:19.773266" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:19.773495" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '144'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:29:19.773787" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:19.760723" elapsed="0.013122"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.760111" elapsed="0.013822"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.774353" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.773988" elapsed="0.000497"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.760087" elapsed="0.014444"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.777471" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.776667" elapsed="0.000904"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.776113" elapsed="0.001531"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.776073" elapsed="0.001665"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.779089" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.778410" elapsed="0.000798"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.777858" elapsed="0.001426"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.777822" elapsed="0.001512"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.780576" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:19.779749" elapsed="0.000883"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.781333" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.780814" elapsed="0.000638"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.782504" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:19.781882" elapsed="0.000676"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.781503" elapsed="0.001128"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.780776" elapsed="0.001927"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.783888" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:19.783080" elapsed="0.000864"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.784588" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.784088" elapsed="0.000648"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.785771" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:19.785133" elapsed="0.000695"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.784788" elapsed="0.001112"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.784051" elapsed="0.001894"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:19.786275" elapsed="0.000684"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:29:19.787893" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:19.787332" elapsed="0.000616"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:29:19.788305" elapsed="0.000417"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:29:19.775318" elapsed="0.013484"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:29:19.789005" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-10-06T01:29:19.788890" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.788866" elapsed="0.000248"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.789326" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:29:19.789416" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:29:19.789742" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:29:19.758107" elapsed="0.031676"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:29:19.789847" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:29:19.790018" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:29:19.754777" elapsed="0.035277"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.791526" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:19.791069" elapsed="0.000545"/>
</kw>
<var name="${item}">vport1</var>
<status status="PASS" start="2026-10-06T01:29:19.790847" elapsed="0.000817"/>
</iter>
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.792435" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:19.792009" elapsed="0.000510"/>
</kw>
<var name="${item}">vport2</var>
<status status="PASS" start="2026-10-06T01:29:19.791792" elapsed="0.000776"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:29:19.790670" elapsed="0.001935"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:29:19.790357" elapsed="0.002316"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:19.751534" elapsed="0.041204"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.796340" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:19.795946" elapsed="0.000429"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:19.796434" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:29:19.796602" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:19.795478" elapsed="0.001155"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.798489" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.797950" elapsed="0.000599"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.799162" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.798846" elapsed="0.000390"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:19.811058" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01wo4j9u7mox61tr0ncscuykk72.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:19.811232" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:29:19.811355" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:19.799637" elapsed="0.011752"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.799323" elapsed="0.012123"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.811728" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.811482" elapsed="0.000332"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.799299" elapsed="0.012544"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.813628" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.813150" elapsed="0.000609"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.812816" elapsed="0.000991"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.812791" elapsed="0.001048"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.814699" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.814299" elapsed="0.000469"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.813912" elapsed="0.000901"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.813890" elapsed="0.000954"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.815588" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:19.815083" elapsed="0.000540"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.816024" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.815737" elapsed="0.000363"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.816759" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:19.816365" elapsed="0.000428"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.816131" elapsed="0.000709"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.815712" elapsed="0.001156"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.817590" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:19.817105" elapsed="0.000520"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.818020" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.817738" elapsed="0.000355"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.818743" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:19.818357" elapsed="0.000421"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.818124" elapsed="0.000700"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.817713" elapsed="0.001138"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:19.819048" elapsed="0.000428"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:29:19.820028" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:19.819720" elapsed="0.000341"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:29:19.820286" elapsed="0.000292"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:29:19.812308" elapsed="0.008347"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:29:19.820881" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-10-06T01:29:19.820768" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.820744" elapsed="0.000246"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.821198" elapsed="0.000029"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:29:19.821288" elapsed="0.000019"/>
</return>
<msg time="2026-10-06T01:29:19.821586" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:29:19.797061" elapsed="0.024560"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:29:19.821705" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:29:19.821879" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:29:19.794881" elapsed="0.027031"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.823355" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:19.822914" elapsed="0.000525"/>
</kw>
<var name="${item}">vport1</var>
<status status="PASS" start="2026-10-06T01:29:19.822672" elapsed="0.000817"/>
</iter>
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.824487" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:19.823830" elapsed="0.000742"/>
</kw>
<var name="${item}">vport2</var>
<status status="PASS" start="2026-10-06T01:29:19.823590" elapsed="0.001031"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:29:19.822527" elapsed="0.002130"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:29:19.822211" elapsed="0.002602"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:19.792848" elapsed="0.032011"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.828603" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:19.828227" elapsed="0.000410"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:19.828716" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:29:19.828888" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:19.827767" elapsed="0.001152"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.830637" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.830326" elapsed="0.000394"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.831303" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.830983" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:19.841665" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node08kx9y5d080lbj5jl4gkt6rg2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:19.841837" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:29:19.841954" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:19.831781" elapsed="0.010206"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.831442" elapsed="0.010599"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.842304" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.842075" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.831419" elapsed="0.010996"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.844211" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.843740" elapsed="0.000532"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.843381" elapsed="0.000935"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.843358" elapsed="0.000989"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.845160" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.844778" elapsed="0.000456"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.844417" elapsed="0.000860"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.844396" elapsed="0.000914"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.846050" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:19.845544" elapsed="0.000540"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.846482" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.846176" elapsed="0.000380"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.847219" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:19.846830" elapsed="0.000424"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.846588" elapsed="0.000712"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.846151" elapsed="0.001177"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.848070" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:19.847566" elapsed="0.000539"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.848498" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.848210" elapsed="0.000362"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.849232" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:19.848847" elapsed="0.000419"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.848605" elapsed="0.000706"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.848170" elapsed="0.001169"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:19.849535" elapsed="0.000432"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:29:19.850557" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:19.850250" elapsed="0.000341"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:29:19.850820" elapsed="0.000294"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:29:19.842895" elapsed="0.008311"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:29:19.851408" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:29:19.851294" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.851272" elapsed="0.000243"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.851730" elapsed="0.000029"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:29:19.851828" elapsed="0.000019"/>
</return>
<msg time="2026-10-06T01:29:19.852127" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:29:19.829342" elapsed="0.022821"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:29:19.852243" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:29:19.852416" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:29:19.827153" elapsed="0.025295"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.854098" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:19.853653" elapsed="0.000543"/>
</kw>
<var name="${item}">vport1</var>
<status status="PASS" start="2026-10-06T01:29:19.853426" elapsed="0.000823"/>
</iter>
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.855012" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:19.854570" elapsed="0.000523"/>
</kw>
<var name="${item}">vport2</var>
<status status="PASS" start="2026-10-06T01:29:19.854353" elapsed="0.000790"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:29:19.853071" elapsed="0.002126"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:29:19.852753" elapsed="0.002513"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:19.824970" elapsed="0.030338"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:19.751261" elapsed="0.104083"/>
</for>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:29:19.746845" elapsed="0.108563"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:29:19.739877" elapsed="0.115600"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.861708" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:19.861339" elapsed="0.000395"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.862153" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:19.861885" elapsed="0.000293"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:19.862229" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:29:19.862356" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:19.860826" elapsed="0.001553"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.864981" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:29:19.864711" elapsed="0.000295"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:19.865047" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:29:19.865167" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:19.864380" elapsed="0.000855"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.866393" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.866159" elapsed="0.000275"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.866857" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.866620" elapsed="0.000277"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:19.875634" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:19.875821" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '7159'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;41297796-b474-41c3-aa58-5893fab7fa6e&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;78c80c1f-dd63-431c-b6ee-002221615a09&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;f96bb8d6-692b-4c53-81c0-f250ff4f27c1&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;96:77:29:41:c3:41&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;14&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vport2&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;876f32f5-1e73-4666-9257-7b1c43ad49da&lt;/port-uuid&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;3d2e2b61-820b-4f69-867f-7200a3526a08&lt;/interface-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vport2&lt;/name&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vx1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;419e0f17-cb78-4dcf-8e29-a7b369939327&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vx1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;b6cdb7ea-832c-41fb-9d54-1be03a288a80&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vport1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;c84bd8cd-ca0a-4634-87a1-a05c693a5d00&lt;/port-uuid&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;4baada70-1df3-4df8-9988-2a4b741de208&lt;/interface-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vport1&lt;/name&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:96:77:29:41:c3:41&lt;/datapath-id&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:29:19.876033" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:19.867192" elapsed="0.008866"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.866958" elapsed="0.009138"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.876286" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.876120" elapsed="0.000225"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.866941" elapsed="0.009425"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.877704" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;41297796-b474-41c3-aa58-5893fab7fa6e&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;78c80c1f-dd63-431c-b6ee-002221615a09&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;f96bb8d6-692b-4c53-81c0-f250ff4f27c1&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;96:77:29:41:c3:41&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;14&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vport2&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;876f32f5-1e73-4666-9257-7b1c43ad49da&lt;/port-uuid&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;3d2e2b61-820b-4f69-867f-7200a3526a08&lt;/interface-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vport2&lt;/name&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vx1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;419e0f17-cb78-4dcf-8e29-a7b369939327&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vx1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;b6cdb7ea-832c-41fb-9d54-1be03a288a80&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vport1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;c84bd8cd-ca0a-4634-87a1-a05c693a5d00&lt;/port-uuid&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;4baada70-1df3-4df8-9988-2a4b741de208&lt;/interface-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vport1&lt;/name&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:96:77:29:41:c3:41&lt;/datapath-id&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.877295" elapsed="0.000571"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.877042" elapsed="0.000858"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.877024" elapsed="0.000899"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.878505" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.878229" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.877976" elapsed="0.000602"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.877960" elapsed="0.000640"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.879293" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:19.878793" elapsed="0.000527"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.879594" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.879386" elapsed="0.000262"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.880110" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:19.879845" elapsed="0.000290"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.879670" elapsed="0.000499"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.879369" elapsed="0.000832"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.880726" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:19.880372" elapsed="0.000380"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.881019" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.880817" elapsed="0.000255"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.881554" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:19.881261" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.881094" elapsed="0.000519"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.880800" elapsed="0.000833"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:19.881788" elapsed="0.000293"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:29:19.882466" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:19.882250" elapsed="0.000241"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:29:19.882640" elapsed="0.000233"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:29:19.876700" elapsed="0.006228"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:29:19.883070" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:19.882990" elapsed="0.000134"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.882973" elapsed="0.000174"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.883298" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:29:19.883361" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:29:19.883634" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:29:19.865540" elapsed="0.018122"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:29:19.883724" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:29:19.883846" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:29:19.863960" elapsed="0.019913"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.884904" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:19.884573" elapsed="0.000422"/>
</kw>
<var name="${item}">vport1</var>
<status status="PASS" start="2026-10-06T01:29:19.884413" elapsed="0.000618"/>
</iter>
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.885585" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:19.885281" elapsed="0.000392"/>
</kw>
<var name="${item}">vport2</var>
<status status="PASS" start="2026-10-06T01:29:19.885109" elapsed="0.000647"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:29:19.884309" elapsed="0.001475"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:29:19.884073" elapsed="0.001759"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:19.862530" elapsed="0.023333"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.888415" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:19.888135" elapsed="0.000305"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:19.888482" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:29:19.888602" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:19.887815" elapsed="0.000811"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.889791" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.889552" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.890252" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.890022" elapsed="0.000271"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:19.900770" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01wo4j9u7mox61tr0ncscuykk72.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:19.900954" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '3129'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"41297796-b474-41c3-aa58-5893fab7fa6e","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"78c80c1f-dd63-431c-b6ee-002221615a09","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"f96bb8d6-692b-4c53-81c0-f250ff4f27c1","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"96:77:29:41:c3:41","ovsdb:ofport":65534,"ovsdb:ifindex":14},{"tp-id":"vport2","ovsdb:port-uuid":"876f32f5-1e73-4666-9257-7b1c43ad49da","ovsdb:interface-uuid":"3d2e2b61-820b-4f69-867f-7200a3526a08","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport2","ovsdb:ingress-policing-rate":0},{"tp-id":"vx1","ovsdb:port-uuid":"419e0f17-cb78-4dcf-8e29-a7b369939327","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"b6cdb7ea-832c-41fb-9d54-1be03a288a80","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"},{"tp-id":"vport1","ovsdb:port-uuid":"c84bd8cd-ca0a-4634-87a1-a05c693a5d00","ovsdb:interface-uuid":"4baada70-1df3-4df8-9988-2a4b741de208","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport1","ovsdb:ingress-policing-rate":0}],"ovsdb:datapath-id":"00:00:96:77:29:41:c3:41"}]}]}} 
 </msg>
<msg time="2026-10-06T01:29:19.901079" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:19.890581" elapsed="0.010525"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.890355" elapsed="0.010798"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.901377" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.901198" elapsed="0.000242"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.890338" elapsed="0.011122"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.903103" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"41297796-b474-41c3-aa58-5893fab7fa6e","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"78c80c1f-dd63-431c-b6ee-002221615a09","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"f96bb8d6-692b-4c53-81c0-f250ff4f27c1","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"96:77:29:41:c3:41","ovsdb:ofport":65534,"ovsdb:ifindex":14},{"tp-id":"vport2","ovsdb:port-uuid":"876f32f5-1e73-4666-9257-7b1c43ad49da","ovsdb:interface-uuid":"3d2e2b61-820b-4f69-867f-7200a3526a08","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport2","ovsdb:ingress-policing-rate":0},{"tp-id":"vx1","ovsdb:port-uuid":"419e0f17-cb78-4dcf-8e29-a7b369939327","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"b6cdb7ea-832c-41fb-9d54-1be03a288a80","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"},{"tp-id":"vport1","ovsdb:port-uuid":"c84bd8cd-ca0a-4634-87a1-a05c693a5d00","ovsdb:interface-uuid":"4baada70-1df3-4df8-9988-2a4b741de208","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport1","ovsdb:ingress-policing-rate":0}],"ovsdb:datapath-id":"00:00:96:77:29:41:c3:41"}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.902698" elapsed="0.000527"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.902432" elapsed="0.000827"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.902211" elapsed="0.001071"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.903871" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.903578" elapsed="0.000335"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.903334" elapsed="0.000610"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.903319" elapsed="0.000647"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.904526" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:19.904147" elapsed="0.000405"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.904845" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.904617" elapsed="0.000282"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.905366" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:19.905081" elapsed="0.000309"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.904922" elapsed="0.000502"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.904600" elapsed="0.000844"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.905978" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:19.905615" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.906285" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.906068" elapsed="0.000271"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.906804" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:19.906523" elapsed="0.000307"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.906361" elapsed="0.000502"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.906052" elapsed="0.000831"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:19.907028" elapsed="0.000308"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:29:19.907740" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:19.907494" elapsed="0.000271"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:29:19.907917" elapsed="0.000210"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:29:19.901827" elapsed="0.006371"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:29:19.908348" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-10-06T01:29:19.908262" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.908246" elapsed="0.000186"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.908573" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:29:19.908636" elapsed="0.000016"/>
</return>
<msg time="2026-10-06T01:29:19.908919" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:29:19.888934" elapsed="0.020011"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:29:19.908991" elapsed="0.000028"/>
</return>
<msg time="2026-10-06T01:29:19.909116" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:29:19.887387" elapsed="0.021754"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.910229" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:19.909900" elapsed="0.000406"/>
</kw>
<var name="${item}">vport1</var>
<status status="PASS" start="2026-10-06T01:29:19.909737" elapsed="0.000605"/>
</iter>
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.910901" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:19.910576" elapsed="0.000398"/>
</kw>
<var name="${item}">vport2</var>
<status status="PASS" start="2026-10-06T01:29:19.910416" elapsed="0.000627"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:29:19.909606" elapsed="0.001466"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:29:19.909367" elapsed="0.001754"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:19.885943" elapsed="0.025209"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.913773" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:19.913491" elapsed="0.000307"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:19.913840" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:29:19.913962" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:19.913159" elapsed="0.000826"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.915140" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.914920" elapsed="0.000273"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.915603" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.915381" elapsed="0.000263"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:19.927129" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node08kx9y5d080lbj5jl4gkt6rg2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:19.927293" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '3129'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"41297796-b474-41c3-aa58-5893fab7fa6e","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"78c80c1f-dd63-431c-b6ee-002221615a09","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"f96bb8d6-692b-4c53-81c0-f250ff4f27c1","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"96:77:29:41:c3:41","ovsdb:ofport":65534,"ovsdb:ifindex":14},{"tp-id":"vport2","ovsdb:port-uuid":"876f32f5-1e73-4666-9257-7b1c43ad49da","ovsdb:interface-uuid":"3d2e2b61-820b-4f69-867f-7200a3526a08","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport2","ovsdb:ingress-policing-rate":0},{"tp-id":"vx1","ovsdb:port-uuid":"419e0f17-cb78-4dcf-8e29-a7b369939327","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"b6cdb7ea-832c-41fb-9d54-1be03a288a80","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"},{"tp-id":"vport1","ovsdb:port-uuid":"c84bd8cd-ca0a-4634-87a1-a05c693a5d00","ovsdb:interface-uuid":"4baada70-1df3-4df8-9988-2a4b741de208","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport1","ovsdb:ingress-policing-rate":0}],"ovsdb:datapath-id":"00:00:96:77:29:41:c3:41"}]}]}} 
 </msg>
<msg time="2026-10-06T01:29:19.927401" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:19.915953" elapsed="0.011476"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.915722" elapsed="0.011747"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.927653" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.927500" elapsed="0.000237"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.915704" elapsed="0.012054"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.929224" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"41297796-b474-41c3-aa58-5893fab7fa6e","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"78c80c1f-dd63-431c-b6ee-002221615a09","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"f96bb8d6-692b-4c53-81c0-f250ff4f27c1","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"96:77:29:41:c3:41","ovsdb:ofport":65534,"ovsdb:ifindex":14},{"tp-id":"vport2","ovsdb:port-uuid":"876f32f5-1e73-4666-9257-7b1c43ad49da","ovsdb:interface-uuid":"3d2e2b61-820b-4f69-867f-7200a3526a08","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport2","ovsdb:ingress-policing-rate":0},{"tp-id":"vx1","ovsdb:port-uuid":"419e0f17-cb78-4dcf-8e29-a7b369939327","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"b6cdb7ea-832c-41fb-9d54-1be03a288a80","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"},{"tp-id":"vport1","ovsdb:port-uuid":"c84bd8cd-ca0a-4634-87a1-a05c693a5d00","ovsdb:interface-uuid":"4baada70-1df3-4df8-9988-2a4b741de208","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vport1","ovsdb:ingress-policing-rate":0}],"ovsdb:datapath-id":"00:00:96:77:29:41:c3:41"}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.928839" elapsed="0.000483"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.928583" elapsed="0.000772"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.928565" elapsed="0.000814"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.929954" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:19.929667" elapsed="0.000328"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.929431" elapsed="0.000596"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.929415" elapsed="0.000634"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.930580" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:19.930235" elapsed="0.000371"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.930897" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.930671" elapsed="0.000280"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.931407" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:19.931130" elapsed="0.000306"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.930974" elapsed="0.000497"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.930654" elapsed="0.000836"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.932012" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:19.931657" elapsed="0.000380"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.932317" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:19.932102" elapsed="0.000270"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.932828" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:19.932550" elapsed="0.000303"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:19.932394" elapsed="0.000492"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.932085" elapsed="0.000821"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:19.933047" elapsed="0.000304"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:29:19.933743" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:19.933508" elapsed="0.000260"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:29:19.933918" elapsed="0.000209"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:29:19.928240" elapsed="0.005959"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:29:19.934346" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:19.934263" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.934246" elapsed="0.000178"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:19.934562" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:29:19.934625" elapsed="0.000015"/>
</return>
<msg time="2026-10-06T01:29:19.934906" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:29:19.914293" elapsed="0.020639"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:29:19.934977" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:29:19.935100" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:29:19.912748" elapsed="0.022376"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.936256" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:19.935930" elapsed="0.000401"/>
</kw>
<var name="${item}">vport1</var>
<status status="PASS" start="2026-10-06T01:29:19.935768" elapsed="0.000599"/>
</iter>
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.936927" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:19.936601" elapsed="0.000404"/>
</kw>
<var name="${item}">vport2</var>
<status status="PASS" start="2026-10-06T01:29:19.936443" elapsed="0.000637"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:29:19.935644" elapsed="0.001465"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:29:19.935412" elapsed="0.001745"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:19.911246" elapsed="0.025959"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:19.862425" elapsed="0.074807"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:29:19.860122" elapsed="0.077158"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:29:19.855784" elapsed="0.081549"/>
</kw>
<doc>Add Tap Device vport1 and vport2 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:29:19.259567" elapsed="0.677832"/>
</kw>
<doc>Add tap devices to the bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="PASS" start="2026-10-06T01:29:18.873774" elapsed="1.063750"/>
</test>
<test id="s1-s2-s1-t34" name="Delete the Bridge Manually and Verify After Recover" line="166">
<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-10-06T01:29:19.939155" elapsed="0.000217"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:29:19.938902" elapsed="0.000523"/>
</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-10-06T01:29:19.940483" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:19.940396" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.940377" elapsed="0.000196"/>
</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-10-06T01:29:19.942961" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:19.942875" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.942857" elapsed="0.000169"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.943957" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:19.943615" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:19.944418" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:19.944131" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:19.944482" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:29:19.944607" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:19.943258" elapsed="0.001373"/>
</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-10-06T01:29:19.947038" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:19.946954" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.946937" elapsed="0.000164"/>
</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-10-06T01:29:19.948288" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:19.948191" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:19.948162" elapsed="0.000188"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:19.948755" level="INFO">${karaf_connection_index} = 388</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-10-06T01:29:19.948497" elapsed="0.000283"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:19.949140" 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-10-06T01:29:19.948946" elapsed="0.000218"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:19.982255" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:19.949773" elapsed="0.032664"/>
</kw>
<msg time="2026-10-06T01:29:19.982606" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:19.982647" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:19.949333" elapsed="0.033383"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:20.056921" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:19.983328" elapsed="0.073878"/>
</kw>
<msg time="2026-10-06T01:29:20.057372" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:20.057414" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:19.982884" elapsed="0.074565"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.057761" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:20.057521" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.057502" elapsed="0.000356"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.058394" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:20.058037" elapsed="0.000445"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.058761" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:20.058544" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.058527" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:20.058886" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:20.061382" elapsed="0.000513"/>
</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-10-06T01:29:20.063190" elapsed="0.000644"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:20.065272" elapsed="0.000318"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:20.059709" elapsed="0.005949"/>
</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-10-06T01:29:20.059165" elapsed="0.006632"/>
</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="PASS" start="2026-10-06T01:29:19.947921" elapsed="0.117953"/>
</kw>
<msg time="2026-10-06T01:29:20.065957" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:20.065995" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:19.947260" elapsed="0.118768"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:20.066241" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:29:20.066099" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.066082" elapsed="0.000239"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:29:20.066655" elapsed="0.000116"/>
</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-10-06T01:29:20.067056" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:20.067122" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:29:19.946654" elapsed="0.120567"/>
</kw>
<msg time="2026-10-06T01:29:20.067305" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:20.067344" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:19.944967" elapsed="0.122410"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.067667" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:20.067450" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.067433" elapsed="0.000325"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:19.944830" elapsed="0.122949"/>
</iter>
<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-10-06T01:29:20.070233" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:20.070132" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.070114" elapsed="0.000216"/>
</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-10-06T01:29:20.071457" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:20.071370" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.071353" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:20.071909" level="INFO">${karaf_connection_index} = 390</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-10-06T01:29:20.071661" elapsed="0.000273"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:20.072288" 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-10-06T01:29:20.072095" elapsed="0.000217"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:20.103053" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:20.072899" elapsed="0.030379"/>
</kw>
<msg time="2026-10-06T01:29:20.103452" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:20.103494" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:20.072467" elapsed="0.031060"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:20.176583" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:20.104175" elapsed="0.072672"/>
</kw>
<msg time="2026-10-06T01:29:20.177031" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:20.177073" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:20.103728" elapsed="0.073378"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.177494" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:20.177225" elapsed="0.000345"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.177192" elapsed="0.000407"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.178208" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:20.177809" elapsed="0.000487"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.178555" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:20.178358" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.178341" elapsed="0.000307"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:20.178712" elapsed="0.000041"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:20.181408" elapsed="0.000514"/>
</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-10-06T01:29:20.183190" elapsed="0.000514"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:20.185107" elapsed="0.003712"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:20.179622" elapsed="0.009279"/>
</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-10-06T01:29:20.179059" elapsed="0.009961"/>
</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="PASS" start="2026-10-06T01:29:20.071099" elapsed="0.117998"/>
</kw>
<msg time="2026-10-06T01:29:20.189196" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:20.189238" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:20.070488" elapsed="0.118786"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:20.189433" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:20.189347" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.189328" elapsed="0.000237"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.189932" elapsed="0.000025"/>
</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-10-06T01:29:20.190304" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:20.190370" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:29:20.069843" elapsed="0.120611"/>
</kw>
<msg time="2026-10-06T01:29:20.190538" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:20.190577" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:20.068023" elapsed="0.122589"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.190928" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:20.190708" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.190664" elapsed="0.000334"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:20.067886" elapsed="0.123134"/>
</iter>
<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-10-06T01:29:20.193486" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:20.193397" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.193379" elapsed="0.000170"/>
</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-10-06T01:29:20.194659" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:20.194575" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.194558" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:20.195132" level="INFO">${karaf_connection_index} = 392</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-10-06T01:29:20.194898" elapsed="0.000259"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:20.195521" 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-10-06T01:29:20.195333" elapsed="0.000212"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:20.227300" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:20.196128" elapsed="0.031360"/>
</kw>
<msg time="2026-10-06T01:29:20.227656" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:20.227722" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:20.195717" elapsed="0.032042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:20.305505" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:20.228371" elapsed="0.077357"/>
</kw>
<msg time="2026-10-06T01:29:20.305895" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:20.305937" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:20.227928" elapsed="0.078044"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.306280" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:20.306051" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.306030" elapsed="0.000347"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.306921" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:20.306556" elapsed="0.000451"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.307332" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:20.307068" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.307051" elapsed="0.000381"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:20.307464" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:20.310014" elapsed="0.000493"/>
</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-10-06T01:29:20.311759" elapsed="0.000482"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:20.313598" elapsed="0.000510"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:20.308324" elapsed="0.005867"/>
</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-10-06T01:29:20.307788" elapsed="0.006522"/>
</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="PASS" start="2026-10-06T01:29:20.194318" elapsed="0.120071"/>
</kw>
<msg time="2026-10-06T01:29:20.314473" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:20.314513" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:20.193725" elapsed="0.120823"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:20.314791" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:29:20.314620" elapsed="0.000229"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.314602" elapsed="0.000271"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.315216" elapsed="0.000024"/>
</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-10-06T01:29:20.315518" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:20.315582" elapsed="0.000013"/>
</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="PASS" start="2026-10-06T01:29:20.193083" elapsed="0.122584"/>
</kw>
<msg time="2026-10-06T01:29:20.315771" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:20.315810" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:20.191294" elapsed="0.124551"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.316128" elapsed="0.000018"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:20.315912" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.315896" elapsed="0.000319"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:20.191141" elapsed="0.125096"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:19.944692" elapsed="0.371575"/>
</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-10-06T01:29:19.942556" elapsed="0.373769"/>
</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-10-06T01:29:19.940125" elapsed="0.376254"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:19.939580" elapsed="0.376845"/>
</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-10-06T01:29:19.938538" elapsed="0.377939"/>
</kw>
<kw name="Delete Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.320090" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:20.319853" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.319836" elapsed="0.000328"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:20.320503" 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-10-06T01:29:20.320597" 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-10-06T01:29:20.320370" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.321148" level="INFO">Attempting to execute command "sudo ovs-vsctl del-br br-s1" on remote system "10.30.170.234" 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-10-06T01:29:20.320858" elapsed="0.000346"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:20.321702" level="INFO">${conn_id} = 547</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-10-06T01:29:20.321380" elapsed="0.000348"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.322571" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:29:20.322640" 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-10-06T01:29:20.322301" elapsed="0.000361"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:20.322827" elapsed="0.000280"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:29:20.323901" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:29:20.685483" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:29:15 UTC 2026

  System load:  0.0                Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:29:19 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:29:20.323652" elapsed="0.361967"/>
</kw>
<msg time="2026-10-06T01:29:20.685718" 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-10-06T01:29:20.323284" elapsed="0.362517"/>
</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-10-06T01:29:20.321925" elapsed="0.363984"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:29:20.686439" level="INFO">Executing command 'sudo ovs-vsctl del-br br-s1'.</msg>
<msg time="2026-10-06T01:29:20.750259" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:29:20.750511" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:29:20.750602" level="INFO">${stderr} = </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-10-06T01:29:20.686197" elapsed="0.064455"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:20.751074" elapsed="0.000825"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.753089" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:20.752449" elapsed="0.000749"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:20.753626" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:20.753376" elapsed="0.000386"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.753319" elapsed="0.000495"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:29:20.754105" elapsed="0.000059"/>
</return>
<status status="PASS" start="2026-10-06T01:29:20.753924" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.753893" elapsed="0.000413"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:20.754374" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:20.756082" elapsed="0.000694"/>
</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-10-06T01:29:20.757212" elapsed="0.000328"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:20.757878" elapsed="0.000195"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:20.755082" elapsed="0.003114"/>
</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-10-06T01:29:20.319413" elapsed="0.438938"/>
</kw>
<msg time="2026-10-06T01:29:20.758456" 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-10-06T01:29:20.318857" elapsed="0.439707"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl del-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:29:20.318422" elapsed="0.440453"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.760032" level="INFO">${dictionary} = {'br-s1': '0'}</msg>
<var>${dictionary}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:29:20.759336" elapsed="0.000750"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.767517" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:20.766771" elapsed="0.000802"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.768553" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:20.767932" elapsed="0.000675"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:20.768725" elapsed="0.000062"/>
</return>
<msg time="2026-10-06T01:29:20.769008" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:20.765939" elapsed="0.003119"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.774587" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:29:20.774182" elapsed="0.000443"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:20.774710" elapsed="0.000040"/>
</return>
<msg time="2026-10-06T01:29:20.774894" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:20.773669" elapsed="0.001259"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.776716" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:20.776364" elapsed="0.000416"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.777401" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:20.777057" elapsed="0.000404"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:20.786538" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:20.786857" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3371'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:29:20.787146" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:20.777916" elapsed="0.009283"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:20.777552" elapsed="0.009707"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.787527" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:20.787299" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.777526" elapsed="0.010118"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.789630" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;54964&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:20.789053" elapsed="0.000720"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:20.788697" elapsed="0.001124"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.788651" elapsed="0.001204"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.790716" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:20.790298" elapsed="0.000480"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:20.789931" elapsed="0.000893"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.789908" elapsed="0.000950"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.791749" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:20.791120" elapsed="0.000666"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.792205" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:20.791882" elapsed="0.000402"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.792966" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:20.792551" elapsed="0.000451"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:20.792317" elapsed="0.000733"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.791857" elapsed="0.001224"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.793884" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:20.793362" elapsed="0.000558"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.794354" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:20.794015" elapsed="0.000475"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.795195" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:20.794788" elapsed="0.000444"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:20.794529" elapsed="0.000752"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.793990" elapsed="0.001321"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:20.795519" elapsed="0.000466"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:29:20.796603" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:20.796239" elapsed="0.000400"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:29:20.796896" elapsed="0.000333"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:29:20.788156" elapsed="0.009156"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:29:20.797525" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-10-06T01:29:20.797403" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.797379" elapsed="0.000260"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.797871" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:29:20.797966" elapsed="0.000021"/>
</return>
<msg time="2026-10-06T01:29:20.798382" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:29:20.775408" elapsed="0.023015"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:29:20.798491" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:29:20.798670" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:29:20.772844" elapsed="0.025887"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.800592" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:20.800080" elapsed="0.000651"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:29:20.799542" elapsed="0.001246"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:29:20.799385" elapsed="0.001446"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:29:20.799033" elapsed="0.001871"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:20.769483" elapsed="0.031468"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.804866" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:20.804447" elapsed="0.000457"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:20.804965" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:29:20.805145" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:20.803935" elapsed="0.001260"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.806970" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:20.806618" elapsed="0.000414"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.807652" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:20.807324" elapsed="0.000408"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:20.819373" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01wo4j9u7mox61tr0ncscuykk72.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:20.819569" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '1397'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:29:20.819814" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:20.808161" elapsed="0.011692"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:20.807823" elapsed="0.012093"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.820212" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:20.819954" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.807798" elapsed="0.012532"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.822313" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:20.821763" elapsed="0.000628"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:20.821388" elapsed="0.001051"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.821361" elapsed="0.001112"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.823335" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:20.822919" elapsed="0.000477"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:20.822548" elapsed="0.000894"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.822526" elapsed="0.000950"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.824294" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:20.823755" elapsed="0.000577"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.824751" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:20.824429" elapsed="0.000402"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.825508" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:20.825097" elapsed="0.000447"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:20.824864" elapsed="0.000730"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.824403" elapsed="0.001221"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.826413" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:20.825896" elapsed="0.000554"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.826872" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:20.826546" elapsed="0.000403"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.827614" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:20.827226" elapsed="0.000424"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:20.826982" elapsed="0.000739"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.826521" elapsed="0.001231"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:20.827962" elapsed="0.000449"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:29:20.828997" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:20.828643" elapsed="0.000390"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:29:20.829271" elapsed="0.000309"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:29:20.820850" elapsed="0.008815"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:29:20.829903" elapsed="0.000041"/>
</return>
<status status="PASS" start="2026-10-06T01:29:20.829781" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.829755" elapsed="0.000268"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.830249" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:29:20.830394" elapsed="0.000023"/>
</return>
<msg time="2026-10-06T01:29:20.830767" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:29:20.805634" elapsed="0.025172"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:29:20.830875" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:29:20.831056" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:29:20.803301" elapsed="0.027792"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.832630" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:20.832158" elapsed="0.000589"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:29:20.831922" elapsed="0.000880"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:29:20.831765" elapsed="0.001079"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:29:20.831410" elapsed="0.001506"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:20.801068" elapsed="0.031894"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.836809" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:20.836393" elapsed="0.000453"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:20.836907" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:29:20.837085" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:20.835906" elapsed="0.001212"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.838872" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:20.838521" elapsed="0.000413"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.839655" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:20.839228" elapsed="0.000483"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:20.850581" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node08kx9y5d080lbj5jl4gkt6rg2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:20.850728" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '1397'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:29:20.850824" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:20.840007" elapsed="0.010841"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:20.839775" elapsed="0.011112"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.851064" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:20.850912" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.839758" elapsed="0.011385"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.852435" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":54964,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:20.852077" elapsed="0.000451"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:20.851837" elapsed="0.000724"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.851819" elapsed="0.000765"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.853159" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:20.852889" elapsed="0.000323"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:20.852635" elapsed="0.000609"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.852620" elapsed="0.000646"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.853799" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:20.853438" elapsed="0.000386"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.854091" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:20.853888" elapsed="0.000255"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.854597" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:20.854334" elapsed="0.000288"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:20.854165" elapsed="0.000490"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.853872" elapsed="0.000817"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.855210" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:20.854860" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.855500" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:20.855298" elapsed="0.000253"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.856005" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:20.855744" elapsed="0.000286"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:20.855573" elapsed="0.000489"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.855282" elapsed="0.000800"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:20.856232" elapsed="0.000289"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:29:20.856909" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:20.856691" elapsed="0.000242"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:29:20.857080" elapsed="0.000219"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:29:20.851477" elapsed="0.005878"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:29:20.857497" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:20.857417" elapsed="0.000135"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.857401" elapsed="0.000173"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.857726" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:29:20.857790" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:29:20.858022" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:29:20.837577" elapsed="0.020471"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:29:20.858093" elapsed="0.000024"/>
</return>
<msg time="2026-10-06T01:29:20.858231" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/9fdd0147-e5ce-4fdc-a62e-949b33770316","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:29:20.835278" elapsed="0.022978"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.859284" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:20.858968" elapsed="0.000379"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:29:20.858808" elapsed="0.000575"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:29:20.858701" elapsed="0.000710"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:29:20.858459" elapsed="0.000998"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:20.833083" elapsed="0.026441"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:20.769220" elapsed="0.090332"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary {'br-s1': '0'}.</doc>
<status status="PASS" start="2026-10-06T01:29:20.764819" elapsed="0.094783"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:29:20.760538" elapsed="0.099119"/>
</kw>
<doc>Delete bridge br-s1 using OVS command and verify it gets applied in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:29:20.318035" elapsed="0.541714"/>
</kw>
<doc>Delete bridge with OVS command and verify it gets deleted from all instances.</doc>
<status status="PASS" start="2026-10-06T01:29:19.937973" elapsed="0.921900"/>
</test>
<test id="s1-s2-s1-t35" name="Verify Modified Port After Recover" line="170">
<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-10-06T01:29:20.862011" elapsed="0.000214"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:29:20.861534" elapsed="0.000742"/>
</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-10-06T01:29:20.863190" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:20.863092" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.863074" elapsed="0.000181"/>
</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-10-06T01:29:20.865354" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:20.865268" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.865251" elapsed="0.000166"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.866339" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:20.865997" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.866804" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:20.866513" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:20.866869" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:29:20.866994" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:20.865624" elapsed="0.001394"/>
</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-10-06T01:29:20.869480" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:20.869395" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.869377" elapsed="0.000167"/>
</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-10-06T01:29:20.870727" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:20.870616" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.870599" elapsed="0.000192"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:20.871181" level="INFO">${karaf_connection_index} = 388</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-10-06T01:29:20.870938" elapsed="0.000269"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:20.871562" 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-10-06T01:29:20.871371" elapsed="0.000215"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:20.904056" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:20.872210" elapsed="0.032054"/>
</kw>
<msg time="2026-10-06T01:29:20.904431" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:20.904473" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:20.871758" elapsed="0.032749"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:20.965894" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "M "o "d "i "f "i "e "d "[C "P "o "r "t "[C "A "f "[78Ct "[A[78Ce
 "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:20.905127" elapsed="0.060957"/>
</kw>
<msg time="2026-10-06T01:29:20.966304" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:20.966347" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:20.904673" elapsed="0.061710"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.966704" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:20.966461" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.966439" elapsed="0.000364"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:20.967343" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "M "o "d "i "f "i "e "d "[C "P "o "r "t "[C "A "f "[78Ct "[A[78Ce
 "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:20.966984" elapsed="0.000440"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.967708" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:20.967486" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.967469" elapsed="0.000336"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:20.967836" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:20.970376" elapsed="0.000508"/>
</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-10-06T01:29:20.972108" elapsed="0.000702"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:20.974210" elapsed="0.000313"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:20.968635" elapsed="0.005954"/>
</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-10-06T01:29:20.968117" elapsed="0.006608"/>
</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="PASS" start="2026-10-06T01:29:20.870359" elapsed="0.104444"/>
</kw>
<msg time="2026-10-06T01:29:20.974885" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:20.974925" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:20.869706" elapsed="0.105255"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:20.975116" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:20.975032" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.975014" elapsed="0.000195"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:29:20.975541" elapsed="0.000024"/>
</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-10-06T01:29:20.975934" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:20.976000" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:29:20.869095" elapsed="0.106991"/>
</kw>
<msg time="2026-10-06T01:29:20.976184" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:20.976226" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:20.867352" elapsed="0.108909"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:20.976549" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:20.976330" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.976314" elapsed="0.000305"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:20.867213" elapsed="0.109427"/>
</iter>
<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-10-06T01:29:20.979149" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:20.979063" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.979045" elapsed="0.000181"/>
</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-10-06T01:29:20.980360" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:20.980239" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:20.980222" elapsed="0.000205"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:20.980862" level="INFO">${karaf_connection_index} = 390</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-10-06T01:29:20.980573" elapsed="0.000314"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:20.981247" 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-10-06T01:29:20.981048" elapsed="0.000223"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:21.012226" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:20.981864" elapsed="0.030580"/>
</kw>
<msg time="2026-10-06T01:29:21.012618" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:21.012660" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:20.981427" elapsed="0.031294"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:21.077595" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "M "o "d "i "f "i "e "d "[C "P "o "r "t "[C "A "f "[78Ct "[A[78Ce
 "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:21.013375" elapsed="0.064529"/>
</kw>
<msg time="2026-10-06T01:29:21.078118" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:21.078160" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:21.012909" elapsed="0.065303"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:21.078651" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:21.078334" elapsed="0.000414"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:21.078293" elapsed="0.000488"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:21.079427" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "M "o "d "i "f "i "e "d "[C "P "o "r "t "[C "A "f "[78Ct "[A[78Ce
 "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:21.078973" elapsed="0.000541"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:21.079805" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:21.079576" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:21.079559" elapsed="0.000343"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:21.079938" elapsed="0.000043"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:21.082842" elapsed="0.000508"/>
</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-10-06T01:29:21.084634" elapsed="0.000545"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:21.086405" elapsed="0.000865"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:21.080910" elapsed="0.006433"/>
</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-10-06T01:29:21.080322" elapsed="0.007145"/>
</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="PASS" start="2026-10-06T01:29:20.979966" elapsed="0.107579"/>
</kw>
<msg time="2026-10-06T01:29:21.087947" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:21.087993" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:20.979374" elapsed="0.108657"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:21.088209" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:21.088106" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:21.088088" elapsed="0.000203"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:21.088631" elapsed="0.000023"/>
</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-10-06T01:29:21.089190" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:21.089259" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:29:20.978773" elapsed="0.110573"/>
</kw>
<msg time="2026-10-06T01:29:21.089435" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:21.089475" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:20.976906" elapsed="0.112603"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:21.089821" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:21.089580" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:21.089564" elapsed="0.000330"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:20.976768" elapsed="0.113147"/>
</iter>
<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-10-06T01:29:21.092504" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:21.092413" elapsed="0.000134"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:21.092395" elapsed="0.000173"/>
</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-10-06T01:29:21.093731" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:21.093617" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:21.093600" elapsed="0.000195"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:21.094196" level="INFO">${karaf_connection_index} = 392</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-10-06T01:29:21.093941" elapsed="0.000281"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:21.094576" 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-10-06T01:29:21.094386" elapsed="0.000213"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:21.126065" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:21.095203" elapsed="0.031067"/>
</kw>
<msg time="2026-10-06T01:29:21.126439" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:21.126482" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:21.094771" elapsed="0.031746"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:21.188296" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "M "o "d "i "f "i "e "d "[C "P "o "r "t "[C "A "f "[78Ct "[A[78Ce
 "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:21.127147" elapsed="0.061340"/>
</kw>
<msg time="2026-10-06T01:29:21.188650" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:21.188735" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:21.126706" elapsed="0.062066"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:21.189057" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:21.188847" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:21.188827" elapsed="0.000327"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:21.189718" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "M "o "d "i "f "i "e "d "[C "P "o "r "t "[C "A "f "[78Ct "[A[78Ce
 "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:21.189355" elapsed="0.000445"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:21.190058" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:21.189861" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:21.189844" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:21.190194" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:21.192836" elapsed="0.000706"/>
</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-10-06T01:29:21.194826" elapsed="0.000480"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:21.196643" elapsed="0.000485"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:21.191074" elapsed="0.006136"/>
</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-10-06T01:29:21.190541" elapsed="0.006786"/>
</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="PASS" start="2026-10-06T01:29:21.093356" elapsed="0.104049"/>
</kw>
<msg time="2026-10-06T01:29:21.197488" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:21.197528" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:21.092733" elapsed="0.104830"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:21.197804" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:21.197634" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:21.197616" elapsed="0.000268"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:21.198226" elapsed="0.000024"/>
</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-10-06T01:29:21.198533" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:21.198599" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:29:21.092094" elapsed="0.106608"/>
</kw>
<msg time="2026-10-06T01:29:21.198790" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:21.198830" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:21.090199" elapsed="0.108666"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:21.199152" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:21.198933" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:21.198917" elapsed="0.000323"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:21.090043" elapsed="0.109218"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:20.867064" elapsed="0.332226"/>
</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-10-06T01:29:20.864960" elapsed="0.334391"/>
</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-10-06T01:29:20.862837" elapsed="0.336571"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:20.862423" elapsed="0.337030"/>
</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-10-06T01:29:20.860980" elapsed="0.338529"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:29:21.201805" level="INFO">${port_dictionary} = {'br01': '6', 'vx2': '3', '10.0.0.19': '1'}</msg>
<var>${port_dictionary}</var>
<arg>br01=6</arg>
<arg>vx2=3</arg>
<arg>10.0.0.19=1</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:29:21.201454" elapsed="0.000376"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:29:21.206372" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:29:21.205055" elapsed="0.001353">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:29:22.216142" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:29:22.213142" elapsed="0.003117">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:29:23.225978" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:29:23.222973" elapsed="0.003090">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:29:24.236148" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:29:24.233168" elapsed="0.003073">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:29:25.246080" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:29:25.243062" elapsed="0.003136">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:29:26.256456" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:29:26.253363" elapsed="0.003198">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<msg time="2026-10-06T01:29:26.256813" level="FAIL">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</msg>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-10-06T01:29:21.202033" elapsed="5.055102">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:29:21.201073" elapsed="5.056340">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify modified port exists in all instances.</doc>
<status status="FAIL" start="2026-10-06T01:29:20.860364" elapsed="5.397384">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s2-s1-t36" name="Delete Port In New Owner After Recover" line="174">
<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-10-06T01:29:26.262713" elapsed="0.000820"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:29:26.262049" elapsed="0.001601"/>
</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-10-06T01:29:26.265898" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:26.265634" elapsed="0.000367"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.265585" elapsed="0.000466"/>
</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-10-06T01:29:26.270394" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:26.270204" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.270165" elapsed="0.000368"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:26.272816" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:26.272006" elapsed="0.000868"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:26.273883" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:26.273241" elapsed="0.000696"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:26.274027" elapsed="0.000064"/>
</return>
<msg time="2026-10-06T01:29:26.274350" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:26.271164" elapsed="0.003237"/>
</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-10-06T01:29:26.280476" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:26.280279" elapsed="0.000426"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.280238" elapsed="0.000527"/>
</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-10-06T01:29:26.283474" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:26.283282" elapsed="0.000374"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.283243" elapsed="0.000503"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:26.284633" level="INFO">${karaf_connection_index} = 388</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-10-06T01:29:26.284086" elapsed="0.000651"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:26.285558" 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-10-06T01:29:26.285134" elapsed="0.000477"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:26.319302" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:26.287017" elapsed="0.032556"/>
</kw>
<msg time="2026-10-06T01:29:26.319828" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:26.319886" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.286009" elapsed="0.033926"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:26.387567" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "N "e "w "[C "O "w "n "e "[78Cr "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:26.320817" elapsed="0.066965"/>
</kw>
<msg time="2026-10-06T01:29:26.387959" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:26.388001" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.320191" elapsed="0.067844"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:26.388370" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:26.388149" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.388088" elapsed="0.000378"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:26.389016" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "N "e "w "[C "O "w "n "e "[78Cr "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:26.388649" elapsed="0.000446"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:26.389371" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:26.389175" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.389157" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:26.389494" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:26.392082" elapsed="0.000503"/>
</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-10-06T01:29:26.393946" elapsed="0.000495"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:26.395827" elapsed="0.000334"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:26.390351" elapsed="0.005878"/>
</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-10-06T01:29:26.389824" elapsed="0.006523"/>
</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="PASS" start="2026-10-06T01:29:26.282597" elapsed="0.113829"/>
</kw>
<msg time="2026-10-06T01:29:26.396511" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:26.396551" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.281104" elapsed="0.115482"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:26.396823" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:26.396657" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.396640" elapsed="0.000262"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:29:26.397250" elapsed="0.000024"/>
</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-10-06T01:29:26.397599" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:26.397665" elapsed="0.000031"/>
</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="PASS" start="2026-10-06T01:29:26.279563" elapsed="0.118208"/>
</kw>
<msg time="2026-10-06T01:29:26.397857" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:26.397897" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.275261" elapsed="0.122671"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:26.398234" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:26.398001" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.397984" elapsed="0.000321"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:26.274914" elapsed="0.123412"/>
</iter>
<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-10-06T01:29:26.403263" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:26.403174" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.403156" elapsed="0.000170"/>
</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-10-06T01:29:26.404441" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:26.404357" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.404340" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:26.404972" level="INFO">${karaf_connection_index} = 390</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-10-06T01:29:26.404732" elapsed="0.000265"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:26.405363" 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-10-06T01:29:26.405178" elapsed="0.000209"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:26.433045" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:26.406262" elapsed="0.027062"/>
</kw>
<msg time="2026-10-06T01:29:26.433566" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:26.433628" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.405538" elapsed="0.028167"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:26.484379" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "N "e "w "[C "O "w "n "e "[78Cr "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:26.434653" elapsed="0.049945"/>
</kw>
<msg time="2026-10-06T01:29:26.484798" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:26.484840" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.433969" elapsed="0.050907"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:26.485232" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:26.484969" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.484941" elapsed="0.000390"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:26.485900" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "N "e "w "[C "O "w "n "e "[78Cr "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:26.485514" elapsed="0.000470"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:26.486260" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:26.486047" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.486029" elapsed="0.000324"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:26.486387" elapsed="0.000036"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:26.489317" elapsed="0.000516"/>
</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-10-06T01:29:26.491103" elapsed="0.000520"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:26.493044" elapsed="0.000341"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:26.487373" elapsed="0.006082"/>
</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-10-06T01:29:26.486819" elapsed="0.006756"/>
</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="PASS" start="2026-10-06T01:29:26.404085" elapsed="0.089569"/>
</kw>
<msg time="2026-10-06T01:29:26.493823" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:26.493865" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.403473" elapsed="0.090427"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:26.494061" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:26.493974" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.493956" elapsed="0.000202"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:26.494500" elapsed="0.000024"/>
</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-10-06T01:29:26.494847" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:26.494914" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:29:26.402859" elapsed="0.092144"/>
</kw>
<msg time="2026-10-06T01:29:26.495094" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:26.495150" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.398576" elapsed="0.096614"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:26.495488" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:26.495263" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.495246" elapsed="0.000315"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:26.398441" elapsed="0.097141"/>
</iter>
<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-10-06T01:29:26.498389" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:26.498304" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.498287" elapsed="0.000165"/>
</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-10-06T01:29:26.499646" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:26.499534" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.499510" elapsed="0.000254"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:26.500215" level="INFO">${karaf_connection_index} = 392</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-10-06T01:29:26.499954" elapsed="0.000286"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:26.500590" 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-10-06T01:29:26.500403" elapsed="0.000211"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:26.533923" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:26.501267" elapsed="0.032830"/>
</kw>
<msg time="2026-10-06T01:29:26.534284" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:26.534326" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.500787" elapsed="0.033574"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:26.602311" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "N "e "w "[C "O "w "n "e "[78Cr "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:26.535011" elapsed="0.067522"/>
</kw>
<msg time="2026-10-06T01:29:26.602721" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:26.602766" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.534523" elapsed="0.068279"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:26.603086" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:26.602876" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.602857" elapsed="0.000341"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:26.603739" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "N "e "w "[C "O "w "n "e "[78Cr "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:26.603380" elapsed="0.000440"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:26.604082" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:26.603882" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.603865" elapsed="0.000329"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:26.604225" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:26.606797" elapsed="0.000495"/>
</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-10-06T01:29:26.608549" elapsed="0.000627"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:26.610359" elapsed="0.000401"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:26.605021" elapsed="0.005812"/>
</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-10-06T01:29:26.604497" elapsed="0.006451"/>
</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="PASS" start="2026-10-06T01:29:26.499226" elapsed="0.111799"/>
</kw>
<msg time="2026-10-06T01:29:26.611316" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:26.611363" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.498613" elapsed="0.112786"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:26.611557" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:26.611470" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.611453" elapsed="0.000183"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:26.611973" elapsed="0.000024"/>
</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-10-06T01:29:26.612303" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:26.612369" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:29:26.497988" elapsed="0.114466"/>
</kw>
<msg time="2026-10-06T01:29:26.612538" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:26.612578" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.495969" elapsed="0.116643"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:26.613048" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:26.612826" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.612664" elapsed="0.000471"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:26.495827" elapsed="0.117330"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:26.274516" elapsed="0.338670"/>
</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-10-06T01:29:26.269491" elapsed="0.343753"/>
</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-10-06T01:29:26.265008" elapsed="0.348323"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.264019" elapsed="0.349358"/>
</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-10-06T01:29:26.261058" elapsed="0.352371"/>
</kw>
<kw name="Delete Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:29:26.617425" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<doc>Delete port vx2 from bridge br01 in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:29:26.616254" elapsed="0.001207">Variable '${new_owner}' not found.</status>
</kw>
<doc>Delete port in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:29:26.259087" elapsed="0.358519">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t37" name="Delete Bridge In New Owner And Verify After Recover" line="178">
<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-10-06T01:29:26.619275" elapsed="0.000199"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:29:26.619010" elapsed="0.000513"/>
</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-10-06T01:29:26.620758" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:26.620654" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.620636" elapsed="0.000187"/>
</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-10-06T01:29:26.622911" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:26.622826" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.622808" elapsed="0.000167"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:26.623918" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:26.623568" elapsed="0.000377"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:26.624384" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:26.624097" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:26.624448" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:29:26.624574" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:26.623202" elapsed="0.001395"/>
</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-10-06T01:29:26.627195" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:26.627096" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.627079" elapsed="0.000179"/>
</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-10-06T01:29:26.628380" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:26.628295" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.628278" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:26.628841" level="INFO">${karaf_connection_index} = 388</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-10-06T01:29:26.628587" elapsed="0.000278"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:26.629222" 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-10-06T01:29:26.629027" elapsed="0.000220"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:26.662672" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:26.629833" elapsed="0.033043"/>
</kw>
<msg time="2026-10-06T01:29:26.663038" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:26.663080" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.629399" elapsed="0.033731"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:26.754131" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "N "e "w "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:26.663735" elapsed="0.090590"/>
</kw>
<msg time="2026-10-06T01:29:26.754483" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:26.754566" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.663295" elapsed="0.091308"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:26.754916" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:26.754703" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.754657" elapsed="0.000355"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:26.755542" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "N "e "w "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:26.755205" elapsed="0.000427"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:26.755916" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:26.755713" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.755694" elapsed="0.000315"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:26.756039" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:26.758495" elapsed="0.000491"/>
</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-10-06T01:29:26.760205" elapsed="0.000449"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:26.761850" elapsed="0.000323"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:26.756841" elapsed="0.005399"/>
</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-10-06T01:29:26.756325" elapsed="0.006030"/>
</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="PASS" start="2026-10-06T01:29:26.627998" elapsed="0.134432"/>
</kw>
<msg time="2026-10-06T01:29:26.762513" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:26.762553" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.627406" elapsed="0.135182"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:26.762786" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:26.762656" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.762639" elapsed="0.000225"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:29:26.763214" elapsed="0.000025"/>
</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-10-06T01:29:26.763512" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:26.763576" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:29:26.626804" elapsed="0.136858"/>
</kw>
<msg time="2026-10-06T01:29:26.763799" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:26.763839" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.624958" elapsed="0.138920"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:26.764181" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:26.763945" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.763929" elapsed="0.000323"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:26.624817" elapsed="0.139456"/>
</iter>
<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-10-06T01:29:26.767066" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:26.766982" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.766965" elapsed="0.000181"/>
</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-10-06T01:29:26.768292" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:26.768174" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.768157" elapsed="0.000201"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:26.768751" level="INFO">${karaf_connection_index} = 390</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-10-06T01:29:26.768502" elapsed="0.000275"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:26.769129" 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-10-06T01:29:26.768936" elapsed="0.000218"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:26.796424" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:26.769745" elapsed="0.026873"/>
</kw>
<msg time="2026-10-06T01:29:26.796847" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:26.796890" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.769307" elapsed="0.027619"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:26.845962" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "N "e "w "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:26.797565" elapsed="0.048630"/>
</kw>
<msg time="2026-10-06T01:29:26.846367" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:26.846408" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.797117" elapsed="0.049327"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:26.846811" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:26.846535" elapsed="0.000349"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.846507" elapsed="0.000404"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:26.847476" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "N "e "w "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:26.847095" elapsed="0.000471"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:26.848011" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:26.847628" elapsed="0.000454"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.847611" elapsed="0.000506"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:26.848152" elapsed="0.000036"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:26.850793" elapsed="0.000500"/>
</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-10-06T01:29:26.852541" elapsed="0.000496"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:26.854282" elapsed="0.000318"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:26.849028" elapsed="0.005640"/>
</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-10-06T01:29:26.848472" elapsed="0.006570"/>
</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="PASS" start="2026-10-06T01:29:26.767899" elapsed="0.087237"/>
</kw>
<msg time="2026-10-06T01:29:26.855224" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:26.855264" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.767292" elapsed="0.088008"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:26.855460" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:26.855372" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.855354" elapsed="0.000186"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:26.855903" elapsed="0.000024"/>
</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-10-06T01:29:26.856298" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:26.856365" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:29:26.766671" elapsed="0.089783"/>
</kw>
<msg time="2026-10-06T01:29:26.856542" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:26.856586" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.764515" elapsed="0.092108"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:26.857009" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:26.856781" elapsed="0.000277"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.856763" elapsed="0.000317"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:26.764381" elapsed="0.092738"/>
</iter>
<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-10-06T01:29:26.859811" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:26.859723" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.859704" elapsed="0.000171"/>
</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-10-06T01:29:26.860989" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:26.860905" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.860888" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:26.861518" level="INFO">${karaf_connection_index} = 392</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-10-06T01:29:26.861280" elapsed="0.000263"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:26.861911" 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-10-06T01:29:26.861723" elapsed="0.000213"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:26.894051" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:26.862519" elapsed="0.031726"/>
</kw>
<msg time="2026-10-06T01:29:26.894404" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:26.894445" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.862089" elapsed="0.032392"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:26.970492" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "N "e "w "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:26.895095" elapsed="0.075608"/>
</kw>
<msg time="2026-10-06T01:29:26.970866" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:26.970907" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.894647" elapsed="0.076295"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:26.971238" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:26.971014" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.970996" elapsed="0.000337"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:26.971879" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "N "e "w "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:26.971516" elapsed="0.000446"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:26.972235" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:26.972023" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.972006" elapsed="0.000322"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:26.972358" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:26.974928" elapsed="0.000489"/>
</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-10-06T01:29:26.976638" elapsed="0.000489"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:26.978297" elapsed="0.000303"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:26.973241" elapsed="0.005423"/>
</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-10-06T01:29:26.972667" elapsed="0.006369"/>
</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="PASS" start="2026-10-06T01:29:26.860618" elapsed="0.118511"/>
</kw>
<msg time="2026-10-06T01:29:26.979213" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:26.979253" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.860024" elapsed="0.119264"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:26.979444" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:26.979358" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.979341" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:26.979863" elapsed="0.000024"/>
</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-10-06T01:29:26.980187" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:26.980251" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:29:26.859385" elapsed="0.120952"/>
</kw>
<msg time="2026-10-06T01:29:26.980420" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:26.980460" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.857381" elapsed="0.123114"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:26.980869" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:26.980563" elapsed="0.000358"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.980547" elapsed="0.000396"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:26.857242" elapsed="0.123723"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:26.624649" elapsed="0.356345"/>
</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-10-06T01:29:26.622494" elapsed="0.358558"/>
</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-10-06T01:29:26.620387" elapsed="0.360738"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.619705" elapsed="0.361469"/>
</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-10-06T01:29:26.618553" elapsed="0.362675"/>
</kw>
<kw name="Delete Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:29:26.985382" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<doc>Delete bridge br01 in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:29:26.984167" elapsed="0.001251">Variable '${new_owner}' not found.</status>
</kw>
<doc>Delete bridge in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:29:26.618033" elapsed="0.367526">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t38" name="Create Bridge In Old Owner and Verify After Recover" line="182">
<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-10-06T01:29:26.987147" elapsed="0.000200"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:29:26.986884" elapsed="0.000514"/>
</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-10-06T01:29:26.988308" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:26.988222" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.988205" elapsed="0.000165"/>
</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-10-06T01:29:26.990307" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:26.990222" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.990205" elapsed="0.000165"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:26.991313" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:26.990949" elapsed="0.000390"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:26.991786" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:26.991490" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:26.991852" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:29:26.991977" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:26.990574" elapsed="0.001426"/>
</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-10-06T01:29:26.994530" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:26.994445" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.994427" elapsed="0.000166"/>
</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-10-06T01:29:26.995716" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:26.995608" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:26.995591" elapsed="0.000189"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:26.996165" level="INFO">${karaf_connection_index} = 388</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-10-06T01:29:26.995924" elapsed="0.000266"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:26.996533" 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-10-06T01:29:26.996352" elapsed="0.000205"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:27.030574" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:26.997149" elapsed="0.033652"/>
</kw>
<msg time="2026-10-06T01:29:27.030960" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:27.031002" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.996727" elapsed="0.034311"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:27.113278" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "d "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:27.031638" elapsed="0.081834"/>
</kw>
<msg time="2026-10-06T01:29:27.113633" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:27.113713" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.031217" elapsed="0.082535"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:27.114030" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:27.113824" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.113806" elapsed="0.000334"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:27.114664" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "d "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:27.114323" elapsed="0.000452"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:27.115034" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:27.114838" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.114820" elapsed="0.000320"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:27.115171" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:27.117793" elapsed="0.000496"/>
</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-10-06T01:29:27.119548" elapsed="0.000489"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:27.121422" elapsed="0.000330"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:27.115956" elapsed="0.005862"/>
</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-10-06T01:29:27.115439" elapsed="0.006495"/>
</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="PASS" start="2026-10-06T01:29:26.995346" elapsed="0.126666"/>
</kw>
<msg time="2026-10-06T01:29:27.122094" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:27.122154" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.994757" elapsed="0.127432"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:27.122344" elapsed="0.000023"/>
</return>
<status status="PASS" start="2026-10-06T01:29:27.122259" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.122242" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:29:27.122931" elapsed="0.000024"/>
</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-10-06T01:29:27.123267" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:27.123333" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:29:26.994153" elapsed="0.129265"/>
</kw>
<msg time="2026-10-06T01:29:27.123503" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:27.123543" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.992355" elapsed="0.131223"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:27.123881" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:27.123645" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.123629" elapsed="0.000324"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:26.992216" elapsed="0.131758"/>
</iter>
<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-10-06T01:29:27.126585" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:27.126502" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.126484" elapsed="0.000164"/>
</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-10-06T01:29:27.127772" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:27.127658" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.127641" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:27.128214" level="INFO">${karaf_connection_index} = 390</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-10-06T01:29:27.127976" elapsed="0.000263"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:27.128577" 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-10-06T01:29:27.128398" elapsed="0.000203"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:27.158990" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:27.129196" elapsed="0.030015"/>
</kw>
<msg time="2026-10-06T01:29:27.159378" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:27.159421" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.128772" elapsed="0.030685"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:27.244602" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "d "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:27.160088" elapsed="0.084918"/>
</kw>
<msg time="2026-10-06T01:29:27.245243" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:27.245288" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.159633" elapsed="0.085692"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:27.245765" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:27.245441" elapsed="0.000402"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.245406" elapsed="0.000466"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:27.246509" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "d "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:27.246058" elapsed="0.000540"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:27.246895" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:27.246662" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.246644" elapsed="0.000347"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:27.247026" elapsed="0.000039"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:27.249797" elapsed="0.000517"/>
</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-10-06T01:29:27.251550" elapsed="0.000537"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:27.253443" elapsed="0.000333"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:27.247970" elapsed="0.005876"/>
</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-10-06T01:29:27.247395" elapsed="0.006568"/>
</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="PASS" start="2026-10-06T01:29:27.127400" elapsed="0.126646"/>
</kw>
<msg time="2026-10-06T01:29:27.254151" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:27.254192" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.126815" elapsed="0.127414"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:27.254391" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:27.254303" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.254285" elapsed="0.000184"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:27.254901" elapsed="0.000024"/>
</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-10-06T01:29:27.255231" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:27.255298" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:29:27.126209" elapsed="0.129180"/>
</kw>
<msg time="2026-10-06T01:29:27.255480" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:27.255522" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.124236" elapsed="0.131321"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:27.255870" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:27.255630" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.255614" elapsed="0.000329"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:27.124084" elapsed="0.131880"/>
</iter>
<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-10-06T01:29:27.258793" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:27.258705" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.258670" elapsed="0.000217"/>
</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-10-06T01:29:27.260050" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:27.259965" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.259948" elapsed="0.000180"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:27.260506" level="INFO">${karaf_connection_index} = 392</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-10-06T01:29:27.260272" elapsed="0.000259"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:27.260899" 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-10-06T01:29:27.260710" elapsed="0.000214"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:27.292043" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:27.261504" elapsed="0.030737"/>
</kw>
<msg time="2026-10-06T01:29:27.292401" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:27.292442" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.261079" elapsed="0.031399"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:27.369068" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "d "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:27.293086" elapsed="0.076185"/>
</kw>
<msg time="2026-10-06T01:29:27.369432" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:27.369473" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.292642" elapsed="0.076866"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:27.369817" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:27.369584" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.369563" elapsed="0.000351"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:27.370451" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "d "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:27.370111" elapsed="0.000426"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:27.370822" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:27.370605" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.370588" elapsed="0.000329"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:27.370947" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:27.373483" elapsed="0.000507"/>
</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-10-06T01:29:27.375239" elapsed="0.000483"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:27.377129" elapsed="0.000304"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:27.371791" elapsed="0.005708"/>
</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-10-06T01:29:27.371262" elapsed="0.006352"/>
</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="PASS" start="2026-10-06T01:29:27.259703" elapsed="0.118005"/>
</kw>
<msg time="2026-10-06T01:29:27.377793" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:27.377833" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.259039" elapsed="0.118829"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:27.378023" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:27.377939" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.377921" elapsed="0.000228"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:27.378473" elapsed="0.000024"/>
</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-10-06T01:29:27.378823" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:27.378889" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:29:27.258381" elapsed="0.120594"/>
</kw>
<msg time="2026-10-06T01:29:27.379060" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:27.379116" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.256253" elapsed="0.122900"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:27.379438" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:27.379222" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.379206" elapsed="0.000302"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:27.256094" elapsed="0.123435"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:26.992054" elapsed="0.387503"/>
</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-10-06T01:29:26.989876" elapsed="0.389744"/>
</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-10-06T01:29:26.987948" elapsed="0.391806"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:26.987541" elapsed="0.392267"/>
</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-10-06T01:29:26.986526" elapsed="0.393338"/>
</kw>
<kw name="Create Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:29:27.384145" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Create bridge br01 in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:29:27.382813" elapsed="0.001368">Variable '${original_owner}' not found.</status>
</kw>
<doc>Create Bridge in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:29:26.985954" elapsed="0.398373">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t39" name="Create Port In Old Owner and Verify After Recover" line="186">
<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-10-06T01:29:27.385901" elapsed="0.000215"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:29:27.385636" elapsed="0.000533"/>
</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-10-06T01:29:27.387071" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:27.386983" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.386966" elapsed="0.000187"/>
</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-10-06T01:29:27.389036" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:27.388953" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.388936" elapsed="0.000176"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:27.390025" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:27.389693" elapsed="0.000358"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:27.390491" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:27.390218" elapsed="0.000297"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:27.390557" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:29:27.390699" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:27.389319" elapsed="0.001404"/>
</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-10-06T01:29:27.393292" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:27.393207" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.393189" elapsed="0.000166"/>
</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-10-06T01:29:27.394510" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:27.394426" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.394409" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:27.394975" level="INFO">${karaf_connection_index} = 388</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-10-06T01:29:27.394745" elapsed="0.000255"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:27.395388" 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-10-06T01:29:27.395207" elapsed="0.000206"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:27.428651" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:27.396004" elapsed="0.032852"/>
</kw>
<msg time="2026-10-06T01:29:27.429017" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:27.429059" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.395567" elapsed="0.033543"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:27.508517" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:27.429721" elapsed="0.079011"/>
</kw>
<msg time="2026-10-06T01:29:27.508899" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:27.508940" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.429278" elapsed="0.079701"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:27.509277" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:27.509054" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.509033" elapsed="0.000337"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:27.509915" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:27.509551" elapsed="0.000449"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:27.510276" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:27.510062" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.510045" elapsed="0.000325"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:27.510401" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:27.513030" elapsed="0.000542"/>
</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-10-06T01:29:27.514864" elapsed="0.000476"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:27.516722" elapsed="0.000311"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:27.511211" elapsed="0.005903"/>
</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-10-06T01:29:27.510698" elapsed="0.006537"/>
</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="PASS" start="2026-10-06T01:29:27.394131" elapsed="0.123181"/>
</kw>
<msg time="2026-10-06T01:29:27.517396" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:27.517435" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.393504" elapsed="0.123967"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:27.517627" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:27.517540" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.517523" elapsed="0.000264"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:29:27.518189" elapsed="0.000025"/>
</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-10-06T01:29:27.518612" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:27.518703" 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="PASS" start="2026-10-06T01:29:27.392898" elapsed="0.125895"/>
</kw>
<msg time="2026-10-06T01:29:27.518877" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:27.518916" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.391061" elapsed="0.127890"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:27.519259" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:27.519019" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.519003" elapsed="0.000328"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:27.390922" elapsed="0.128430"/>
</iter>
<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-10-06T01:29:27.523549" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:27.523464" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.523446" elapsed="0.000167"/>
</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-10-06T01:29:27.524756" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:27.524647" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.524630" elapsed="0.000189"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:27.525206" level="INFO">${karaf_connection_index} = 390</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-10-06T01:29:27.524961" elapsed="0.000271"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:27.525574" 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-10-06T01:29:27.525393" elapsed="0.000208"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:27.557986" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:27.526227" elapsed="0.031967"/>
</kw>
<msg time="2026-10-06T01:29:27.558352" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:27.558394" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.525774" elapsed="0.032655"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:27.633578" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:27.559037" elapsed="0.074758"/>
</kw>
<msg time="2026-10-06T01:29:27.633960" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:27.634002" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.558596" elapsed="0.075442"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:27.634335" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:27.634126" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.634092" elapsed="0.000339"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:27.634972" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:27.634610" elapsed="0.000448"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:27.635333" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:27.635135" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.635117" elapsed="0.000350"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:27.635499" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:27.638036" elapsed="0.000489"/>
</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-10-06T01:29:27.639789" elapsed="0.000477"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:27.641633" elapsed="0.000329"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:27.636331" elapsed="0.005697"/>
</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-10-06T01:29:27.635814" elapsed="0.006347"/>
</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="PASS" start="2026-10-06T01:29:27.524387" elapsed="0.117852"/>
</kw>
<msg time="2026-10-06T01:29:27.642323" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:27.642362" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.523780" elapsed="0.118618"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:27.642552" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:27.642468" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.642451" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:27.643030" elapsed="0.000023"/>
</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-10-06T01:29:27.643343" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:27.643408" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:29:27.523167" elapsed="0.120328"/>
</kw>
<msg time="2026-10-06T01:29:27.643580" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:27.643619" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.519602" elapsed="0.124052"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:27.643959" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:27.643741" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.643725" elapsed="0.000304"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:27.519465" elapsed="0.124585"/>
</iter>
<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-10-06T01:29:27.646724" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:27.646620" elapsed="0.000147"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.646602" elapsed="0.000186"/>
</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-10-06T01:29:27.647910" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:27.647825" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.647808" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:27.648360" level="INFO">${karaf_connection_index} = 392</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-10-06T01:29:27.648132" elapsed="0.000253"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:27.648745" 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-10-06T01:29:27.648545" elapsed="0.000224"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:27.680859" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:27.649352" elapsed="0.031685"/>
</kw>
<msg time="2026-10-06T01:29:27.681216" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:27.681258" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.648924" elapsed="0.032369"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:27.762631" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:27.681963" elapsed="0.080895"/>
</kw>
<msg time="2026-10-06T01:29:27.763023" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:27.763065" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.681507" elapsed="0.081610"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:27.763402" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:27.763192" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.763173" elapsed="0.000325"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:27.764043" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:27.763697" elapsed="0.000448"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:27.764406" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:27.764207" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.764190" elapsed="0.000310"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:27.764531" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:27.767084" elapsed="0.000668"/>
</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-10-06T01:29:27.768986" elapsed="0.000500"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:27.770853" elapsed="0.000327"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:27.765386" elapsed="0.005860"/>
</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-10-06T01:29:27.764867" elapsed="0.006497"/>
</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="PASS" start="2026-10-06T01:29:27.647539" elapsed="0.123901"/>
</kw>
<msg time="2026-10-06T01:29:27.771523" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:27.771562" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.646937" elapsed="0.124661"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:27.771803" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:27.771667" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.771649" elapsed="0.000232"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:27.772235" elapsed="0.000024"/>
</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-10-06T01:29:27.772536" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:27.772599" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:29:27.646324" elapsed="0.126401"/>
</kw>
<msg time="2026-10-06T01:29:27.772814" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:27.772854" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.644342" elapsed="0.128547"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:27.773191" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:27.772958" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.772942" elapsed="0.000360"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:27.644205" elapsed="0.129119"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:27.390777" elapsed="0.382575"/>
</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-10-06T01:29:27.388646" elapsed="0.384761"/>
</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-10-06T01:29:27.386728" elapsed="0.386732"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.386315" elapsed="0.387188"/>
</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-10-06T01:29:27.385295" elapsed="0.388257"/>
</kw>
<kw name="Create Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:29:27.777839" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Add Port vx2 to bridge br01 in controller ${controller_index} and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:29:27.776544" elapsed="0.001329">Variable '${original_owner}' not found.</status>
</kw>
<doc>Create Port in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:29:27.384716" elapsed="0.393294">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t40" name="Modify the destination IP of Port In Old Owner After Recover" line="190">
<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-10-06T01:29:27.779497" elapsed="0.000218"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:29:27.779252" elapsed="0.000515"/>
</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-10-06T01:29:27.780658" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:27.780571" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.780554" elapsed="0.000196"/>
</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-10-06T01:29:27.782668" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:27.782583" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.782566" elapsed="0.000189"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:27.783662" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:27.783332" elapsed="0.000371"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:27.784140" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:27.783855" elapsed="0.000309"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:27.784206" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:29:27.784333" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:27.782959" elapsed="0.001396"/>
</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-10-06T01:29:27.786912" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:27.786827" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.786809" elapsed="0.000166"/>
</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-10-06T01:29:27.788148" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:27.788032" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.788015" elapsed="0.000196"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:27.788577" level="INFO">${karaf_connection_index} = 388</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-10-06T01:29:27.788353" elapsed="0.000248"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:27.788964" 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-10-06T01:29:27.788782" elapsed="0.000206"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:27.821989" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:27.789567" elapsed="0.032646"/>
</kw>
<msg time="2026-10-06T01:29:27.822373" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:27.822415" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.789155" elapsed="0.033294"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:27.927704" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:27.823149" elapsed="0.104750"/>
</kw>
<msg time="2026-10-06T01:29:27.928059" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:27.928118" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.822661" elapsed="0.105494"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:27.928433" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:27.928227" elapsed="0.000277"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.928208" elapsed="0.000319"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:27.929078" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:27.928736" elapsed="0.000446"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:27.929440" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:27.929244" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.929227" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:27.929563" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:27.932060" elapsed="0.000648"/>
</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-10-06T01:29:27.933973" elapsed="0.000477"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:27.935633" elapsed="0.000545"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:27.930383" elapsed="0.005860"/>
</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-10-06T01:29:27.929853" elapsed="0.006504"/>
</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="PASS" start="2026-10-06T01:29:27.787771" elapsed="0.148665"/>
</kw>
<msg time="2026-10-06T01:29:27.936519" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:27.936559" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.787159" elapsed="0.149436"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:27.936773" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:27.936670" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.936653" elapsed="0.000198"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:29:27.937181" elapsed="0.000024"/>
</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-10-06T01:29:27.937482" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:27.937547" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:29:27.786514" elapsed="0.151122"/>
</kw>
<msg time="2026-10-06T01:29:27.937817" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:27.937857" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.784703" elapsed="0.153190"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:27.938194" elapsed="0.000069"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:27.937962" elapsed="0.000369"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.937946" elapsed="0.000410"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:27.784550" elapsed="0.153829"/>
</iter>
<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-10-06T01:29:27.940934" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:27.940849" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.940831" elapsed="0.000167"/>
</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-10-06T01:29:27.942184" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:27.942052" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:27.942035" elapsed="0.000211"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:27.942614" level="INFO">${karaf_connection_index} = 390</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-10-06T01:29:27.942388" elapsed="0.000251"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:27.942995" 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-10-06T01:29:27.942815" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:27.976140" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:27.943603" elapsed="0.032735"/>
</kw>
<msg time="2026-10-06T01:29:27.976495" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:27.976537" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.943189" elapsed="0.033383"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:28.065824" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:27.977198" elapsed="0.088833"/>
</kw>
<msg time="2026-10-06T01:29:28.066212" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:28.066253" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.976760" elapsed="0.089529"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:28.066593" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:28.066371" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.066348" elapsed="0.000366"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:28.067271" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:28.066899" elapsed="0.000463"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:28.067624" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:28.067424" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.067407" elapsed="0.000329"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:28.067767" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:28.070314" elapsed="0.000517"/>
</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-10-06T01:29:28.072075" elapsed="0.000482"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:28.073885" elapsed="0.000335"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:28.068578" elapsed="0.005712"/>
</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-10-06T01:29:28.068059" elapsed="0.006350"/>
</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="PASS" start="2026-10-06T01:29:27.941794" elapsed="0.132694"/>
</kw>
<msg time="2026-10-06T01:29:28.074575" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:28.074668" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.941181" elapsed="0.133807"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:28.075166" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:28.075062" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.075045" elapsed="0.000199"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:28.075568" elapsed="0.000024"/>
</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-10-06T01:29:28.075894" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:28.075960" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:29:27.940530" elapsed="0.135517"/>
</kw>
<msg time="2026-10-06T01:29:28.076150" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:28.076192" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.938630" elapsed="0.137598"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:28.076520" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:28.076300" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.076283" elapsed="0.000308"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:27.938491" elapsed="0.138122"/>
</iter>
<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-10-06T01:29:28.079290" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:28.079205" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.079187" elapsed="0.000167"/>
</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-10-06T01:29:28.080469" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:28.080383" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.080354" elapsed="0.000179"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:28.080929" level="INFO">${karaf_connection_index} = 392</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-10-06T01:29:28.080700" elapsed="0.000254"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:28.081311" 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-10-06T01:29:28.081128" elapsed="0.000208"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:28.113108" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:28.081937" elapsed="0.031357"/>
</kw>
<msg time="2026-10-06T01:29:28.113464" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:28.113507" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:28.081504" elapsed="0.032040"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:28.196384" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:28.114202" elapsed="0.082382"/>
</kw>
<msg time="2026-10-06T01:29:28.196779" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:28.196821" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:28.113731" elapsed="0.083126"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:28.197156" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:28.196930" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.196911" elapsed="0.000341"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:28.197834" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "i "o "n "[C "[78CI "[A[78CP
 "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:28.197470" elapsed="0.000453"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:28.198201" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:28.197986" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.197969" elapsed="0.000326"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:28.198325" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:28.200812" elapsed="0.000490"/>
</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-10-06T01:29:28.202498" elapsed="0.000474"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:28.204156" elapsed="0.000308"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:28.199143" elapsed="0.005387"/>
</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-10-06T01:29:28.198598" elapsed="0.006048"/>
</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="PASS" start="2026-10-06T01:29:28.080111" elapsed="0.124642"/>
</kw>
<msg time="2026-10-06T01:29:28.204838" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:28.204877" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:28.079501" elapsed="0.125411"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:28.205068" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-10-06T01:29:28.204982" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.204965" elapsed="0.000198"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:28.205484" elapsed="0.000024"/>
</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-10-06T01:29:28.206123" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:28.206190" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:29:28.078891" elapsed="0.127386"/>
</kw>
<msg time="2026-10-06T01:29:28.206363" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:28.206403" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:28.076928" elapsed="0.129510"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:28.206744" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:28.206507" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.206491" elapsed="0.000326"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:28.076788" elapsed="0.130050"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:27.784407" elapsed="0.422461"/>
</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-10-06T01:29:27.782290" elapsed="0.424632"/>
</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-10-06T01:29:27.780317" elapsed="0.426661"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:27.779914" elapsed="0.427110"/>
</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-10-06T01:29:27.778900" elapsed="0.428178"/>
</kw>
<kw name="Modify the destination IP of Sample Port" owner="ClusterOvsdb">
<msg time="2026-10-06T01:29:28.210105" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Modify the dst ip of port vx2 in bridge br01 in controller ${controller_index}.</doc>
<status status="FAIL" start="2026-10-06T01:29:28.208833" elapsed="0.001308">Variable '${original_owner}' not found.</status>
</kw>
<doc>Modify the dst ip of existing port in Owner.</doc>
<status status="FAIL" start="2026-10-06T01:29:27.778358" elapsed="0.431954">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t41" name="Verify Port Is Modified After Recover" line="194">
<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-10-06T01:29:28.211731" elapsed="0.000202"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:29:28.211467" elapsed="0.000516"/>
</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-10-06T01:29:28.212947" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:28.212860" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.212842" elapsed="0.000168"/>
</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-10-06T01:29:28.214909" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:28.214824" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.214807" elapsed="0.000165"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:28.215892" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:28.215546" elapsed="0.000372"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:28.216351" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:28.216068" elapsed="0.000307"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:28.216415" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:29:28.216540" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:28.215194" elapsed="0.001369"/>
</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-10-06T01:29:28.219122" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:28.219012" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.218994" elapsed="0.000194"/>
</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-10-06T01:29:28.220343" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:28.220259" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.220242" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:28.220820" level="INFO">${karaf_connection_index} = 388</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-10-06T01:29:28.220549" elapsed="0.000297"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:28.221205" 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-10-06T01:29:28.221009" elapsed="0.000221"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:28.254019" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:28.221826" elapsed="0.032397"/>
</kw>
<msg time="2026-10-06T01:29:28.254384" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:28.254426" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:28.221386" elapsed="0.033075"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:28.320348" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CA
 "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:28.255085" elapsed="0.065451"/>
</kw>
<msg time="2026-10-06T01:29:28.320722" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:28.320765" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:28.254626" elapsed="0.066175"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:28.321080" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:28.320873" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.320855" elapsed="0.000336"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:28.321856" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CA
 "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:28.321494" elapsed="0.000482"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:28.322254" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:28.322039" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.322022" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:28.322381" elapsed="0.000055"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:28.324927" elapsed="0.000492"/>
</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-10-06T01:29:28.326655" elapsed="0.000496"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:28.328659" elapsed="0.000329"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:28.323234" elapsed="0.005820"/>
</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-10-06T01:29:28.322707" elapsed="0.006481"/>
</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="PASS" start="2026-10-06T01:29:28.219983" elapsed="0.109282"/>
</kw>
<msg time="2026-10-06T01:29:28.329347" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:28.329387" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:28.219352" elapsed="0.110070"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:28.329576" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:28.329490" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.329473" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:29:28.330066" elapsed="0.000037"/>
</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-10-06T01:29:28.330379" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:28.330443" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:29:28.218721" elapsed="0.111806"/>
</kw>
<msg time="2026-10-06T01:29:28.330609" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:28.330649" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:28.216910" elapsed="0.113805"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:28.331009" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:28.330785" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.330769" elapsed="0.000311"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:28.216771" elapsed="0.114343"/>
</iter>
<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-10-06T01:29:28.333760" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:28.333658" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.333641" elapsed="0.000183"/>
</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-10-06T01:29:28.334942" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:28.334859" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.334842" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:28.335390" level="INFO">${karaf_connection_index} = 390</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-10-06T01:29:28.335162" elapsed="0.000253"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:28.335776" 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-10-06T01:29:28.335575" elapsed="0.000225"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:28.369577" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:28.336389" elapsed="0.033407"/>
</kw>
<msg time="2026-10-06T01:29:28.370000" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:28.370043" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:28.335953" elapsed="0.034127"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:28.446819" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CA
 "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:28.370919" elapsed="0.076148"/>
</kw>
<msg time="2026-10-06T01:29:28.447277" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:28.447319" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:28.370321" elapsed="0.077034"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:28.447746" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:28.447452" elapsed="0.000370"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.447423" elapsed="0.000426"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:28.448448" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CA
 "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:28.448037" elapsed="0.000495"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:28.448816" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:28.448597" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.448577" elapsed="0.000332"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:28.448942" elapsed="0.000036"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:28.451639" elapsed="0.000585"/>
</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-10-06T01:29:28.453481" elapsed="0.000509"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:28.455444" elapsed="0.000336"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:28.449848" elapsed="0.006001"/>
</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-10-06T01:29:28.449288" elapsed="0.006680"/>
</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="PASS" start="2026-10-06T01:29:28.334567" elapsed="0.121483"/>
</kw>
<msg time="2026-10-06T01:29:28.456157" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:28.456199" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:28.333970" elapsed="0.122265"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:28.456398" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:28.456308" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.456290" elapsed="0.000187"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:28.456899" elapsed="0.000024"/>
</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-10-06T01:29:28.457226" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:28.457293" 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="PASS" start="2026-10-06T01:29:28.333365" elapsed="0.124018"/>
</kw>
<msg time="2026-10-06T01:29:28.457473" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:28.457513" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:28.331368" elapsed="0.126182"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:28.457916" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:28.457689" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.457654" elapsed="0.000356"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:28.331231" elapsed="0.126811"/>
</iter>
<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-10-06T01:29:28.460845" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:28.460759" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.460742" elapsed="0.000167"/>
</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-10-06T01:29:28.462055" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:28.461971" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.461954" elapsed="0.000180"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:28.462509" level="INFO">${karaf_connection_index} = 392</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-10-06T01:29:28.462277" elapsed="0.000257"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:28.462901" 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-10-06T01:29:28.462711" elapsed="0.000214"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:28.498933" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:28.463513" elapsed="0.035612"/>
</kw>
<msg time="2026-10-06T01:29:28.499288" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:28.499330" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:28.463078" elapsed="0.036287"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:28.571917" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CA
 "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:28.499982" elapsed="0.072181"/>
</kw>
<msg time="2026-10-06T01:29:28.572339" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:28.572381" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:28.499528" elapsed="0.072887"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:28.572756" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:28.572498" elapsed="0.000331"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.572474" elapsed="0.000380"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:28.573440" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "f "i "e "d "[78C[C "[A[78CA
 "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:28.573037" elapsed="0.000485"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:28.573804" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:28.573583" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.573566" elapsed="0.000333"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:28.573930" elapsed="0.000031"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:28.576513" elapsed="0.000511"/>
</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-10-06T01:29:28.578280" elapsed="0.000498"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:28.579981" elapsed="0.000326"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:28.574789" elapsed="0.005585"/>
</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-10-06T01:29:28.574248" elapsed="0.006241"/>
</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="PASS" start="2026-10-06T01:29:28.461709" elapsed="0.118859"/>
</kw>
<msg time="2026-10-06T01:29:28.580925" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:28.580969" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:28.461058" elapsed="0.119948"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:28.581182" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:28.581080" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.581062" elapsed="0.000199"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:28.581589" elapsed="0.000024"/>
</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-10-06T01:29:28.581918" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:28.581983" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:29:28.460440" elapsed="0.121632"/>
</kw>
<msg time="2026-10-06T01:29:28.582175" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:28.582217" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:28.458349" elapsed="0.123903"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:28.582543" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:28.582323" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:28.582307" elapsed="0.000308"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:28.458192" elapsed="0.124444"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:28.216611" elapsed="0.366057"/>
</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-10-06T01:29:28.214506" elapsed="0.368351"/>
</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-10-06T01:29:28.212534" elapsed="0.370382"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:28.212144" elapsed="0.370821"/>
</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-10-06T01:29:28.211127" elapsed="0.371896"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:29:28.585428" level="INFO">${port_dictionary} = {'br01': '6', 'vx2': '3', '10.0.0.19': '1'}</msg>
<var>${port_dictionary}</var>
<arg>br01=6</arg>
<arg>vx2=3</arg>
<arg>10.0.0.19=1</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:29:28.585080" elapsed="0.000375"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:29:28.589997" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:29:28.588690" elapsed="0.001344">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:29:29.596380" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:29:29.594449" elapsed="0.001993">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:29:30.606608" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:29:30.603468" elapsed="0.003273">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:29:31.617598" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:29:31.614337" elapsed="0.003385">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:29:32.627672" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:29:32.624657" elapsed="0.003131">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:29:33.638239" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:29:33.635087" elapsed="0.003272">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<msg time="2026-10-06T01:29:33.638571" level="FAIL">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</msg>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-10-06T01:29:28.585659" elapsed="5.053225">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:29:28.584711" elapsed="5.054446">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify port is modified in all instances.</doc>
<status status="FAIL" start="2026-10-06T01:29:28.210647" elapsed="5.428790">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s2-s1-t42" name="Delete Port In Old Owner After Recover" line="198">
<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-10-06T01:29:33.642879" elapsed="0.000517"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:29:33.642295" elapsed="0.001216"/>
</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-10-06T01:29:33.645675" elapsed="0.000067"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:33.645454" elapsed="0.000359"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:33.645409" elapsed="0.000453"/>
</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-10-06T01:29:33.650215" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:33.649996" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:33.649957" elapsed="0.000402"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:33.652540" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:33.651725" elapsed="0.000878"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:33.653717" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:33.652974" elapsed="0.000800"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:33.653871" elapsed="0.000072"/>
</return>
<msg time="2026-10-06T01:29:33.654211" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:33.650864" elapsed="0.003399"/>
</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-10-06T01:29:33.663008" elapsed="0.000053"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:33.662788" elapsed="0.000356"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:33.662742" elapsed="0.000451"/>
</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-10-06T01:29:33.666009" elapsed="0.000051"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:33.665808" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:33.665768" elapsed="0.000411"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:33.667113" level="INFO">${karaf_connection_index} = 388</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-10-06T01:29:33.666511" elapsed="0.000661"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:33.667977" 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-10-06T01:29:33.667536" elapsed="0.000513"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:33.702227" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:33.669436" elapsed="0.033198"/>
</kw>
<msg time="2026-10-06T01:29:33.703267" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:33.703332" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:33.668399" elapsed="0.034990"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:33.770851" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "[78Cr "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:33.704517" elapsed="0.066708"/>
</kw>
<msg time="2026-10-06T01:29:33.771487" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:33.771531" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:33.703755" elapsed="0.067814"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:33.772122" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:33.771725" elapsed="0.000481"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:33.771657" elapsed="0.000581"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:33.772942" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "[78Cr "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:33.772432" elapsed="0.000606"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:33.773306" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:33.773104" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:33.773086" elapsed="0.000316"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:33.773440" elapsed="0.000042"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:33.776265" elapsed="0.000521"/>
</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-10-06T01:29:33.778056" elapsed="0.000497"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:33.779773" elapsed="0.000340"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:33.774429" elapsed="0.005754"/>
</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-10-06T01:29:33.773837" elapsed="0.006465"/>
</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="PASS" start="2026-10-06T01:29:33.665139" elapsed="0.115246"/>
</kw>
<msg time="2026-10-06T01:29:33.780480" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:33.780521" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:33.663568" elapsed="0.116989"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:33.781022" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-10-06T01:29:33.780634" elapsed="0.000459"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:33.780617" elapsed="0.000501"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:29:33.781471" elapsed="0.000024"/>
</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-10-06T01:29:33.781817" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:33.781887" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:29:33.661946" elapsed="0.120032"/>
</kw>
<msg time="2026-10-06T01:29:33.782083" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:33.782124" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:33.655132" elapsed="0.127033"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:33.782586" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:33.782358" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:33.782339" elapsed="0.000319"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:33.654741" elapsed="0.127989"/>
</iter>
<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-10-06T01:29:33.785464" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:33.785377" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:33.785360" elapsed="0.000167"/>
</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-10-06T01:29:33.786623" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:33.786537" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:33.786521" elapsed="0.000189"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:33.787125" level="INFO">${karaf_connection_index} = 390</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-10-06T01:29:33.786856" elapsed="0.000295"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:33.787505" 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-10-06T01:29:33.787312" elapsed="0.000217"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:33.828220" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:33.788134" elapsed="0.040298"/>
</kw>
<msg time="2026-10-06T01:29:33.828595" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:33.828637" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:33.787702" elapsed="0.040970"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:33.905150" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "[78Cr "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:33.829320" elapsed="0.076025"/>
</kw>
<msg time="2026-10-06T01:29:33.905510" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:33.905552" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:33.828873" elapsed="0.076713"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:33.905901" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:33.905658" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:33.905640" elapsed="0.000358"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:33.906545" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "[78Cr "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:33.906204" elapsed="0.000422"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:33.906906" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:33.906707" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:33.906671" elapsed="0.000329"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:33.907046" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:33.909533" elapsed="0.000530"/>
</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-10-06T01:29:33.911320" elapsed="0.000513"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:33.913238" elapsed="0.000312"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:33.907844" elapsed="0.005771"/>
</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-10-06T01:29:33.907317" elapsed="0.006435"/>
</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="PASS" start="2026-10-06T01:29:33.786279" elapsed="0.127589"/>
</kw>
<msg time="2026-10-06T01:29:33.913951" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:33.913991" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:33.785689" elapsed="0.128351"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:33.914200" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:33.914112" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:33.914095" elapsed="0.000184"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:33.914596" elapsed="0.000024"/>
</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-10-06T01:29:33.914953" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:33.915019" elapsed="0.000030"/>
</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="PASS" start="2026-10-06T01:29:33.785067" elapsed="0.130055"/>
</kw>
<msg time="2026-10-06T01:29:33.915206" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:33.915245" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:33.783010" elapsed="0.132270"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:33.915567" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:33.915348" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:33.915332" elapsed="0.000305"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:33.782866" elapsed="0.132793"/>
</iter>
<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-10-06T01:29:33.918338" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:33.918252" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:33.918235" elapsed="0.000167"/>
</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-10-06T01:29:33.919505" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:33.919421" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:33.919405" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:33.919964" level="INFO">${karaf_connection_index} = 392</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-10-06T01:29:33.919735" elapsed="0.000254"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:33.920347" 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-10-06T01:29:33.920164" elapsed="0.000207"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:33.953215" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:33.920962" elapsed="0.032437"/>
</kw>
<msg time="2026-10-06T01:29:33.953564" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:33.953605" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:33.920526" elapsed="0.033114"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:34.026273" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "[78Cr "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:33.954283" elapsed="0.072176"/>
</kw>
<msg time="2026-10-06T01:29:34.026625" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:34.026667" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:33.953833" elapsed="0.072897"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.027013" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:34.026804" elapsed="0.000333"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.026785" elapsed="0.000378"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:34.027702" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "[78Cr "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:34.027347" elapsed="0.000437"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.028060" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:34.027846" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.027829" elapsed="0.000327"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:34.028187" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:34.030667" elapsed="0.000528"/>
</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-10-06T01:29:34.032455" elapsed="0.000483"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:34.034325" elapsed="0.000310"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:34.028983" elapsed="0.005736"/>
</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-10-06T01:29:34.028455" elapsed="0.006389"/>
</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="PASS" start="2026-10-06T01:29:33.919163" elapsed="0.115758"/>
</kw>
<msg time="2026-10-06T01:29:34.035005" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:34.035061" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:33.918549" elapsed="0.116548"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:34.035254" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:34.035168" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.035151" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.035655" elapsed="0.000112"/>
</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-10-06T01:29:34.036063" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:34.036128" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:29:33.917944" elapsed="0.118271"/>
</kw>
<msg time="2026-10-06T01:29:34.036300" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:34.036339" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:33.916011" elapsed="0.120363"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.036661" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:34.036442" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.036426" elapsed="0.000325"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:33.915872" elapsed="0.120900"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:33.654381" elapsed="0.382420"/>
</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-10-06T01:29:33.649292" elapsed="0.387566"/>
</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-10-06T01:29:33.644836" elapsed="0.392079"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:33.643873" elapsed="0.393086"/>
</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-10-06T01:29:33.641463" elapsed="0.395548"/>
</kw>
<kw name="Delete Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:29:34.041217" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Delete port vx2 from bridge br01 in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:29:34.039929" elapsed="0.001411">Variable '${original_owner}' not found.</status>
</kw>
<doc>Delete port in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:29:33.640275" elapsed="0.401215">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t43" name="Delete Bridge In Old Owner And Verify After Recover" line="202">
<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-10-06T01:29:34.043099" elapsed="0.000199"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:29:34.042840" elapsed="0.000509"/>
</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-10-06T01:29:34.044257" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:34.044169" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.044152" elapsed="0.000168"/>
</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-10-06T01:29:34.046237" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:34.046153" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.046135" elapsed="0.000166"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:34.047232" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:34.046884" elapsed="0.000374"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:34.047703" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:34.047410" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:34.047771" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:29:34.047897" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:34.046506" elapsed="0.001414"/>
</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-10-06T01:29:34.050487" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:34.050402" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.050384" elapsed="0.000167"/>
</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-10-06T01:29:34.051670" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:34.051586" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.051569" elapsed="0.000191"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:34.052148" level="INFO">${karaf_connection_index} = 388</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-10-06T01:29:34.051905" elapsed="0.000268"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:34.052515" 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-10-06T01:29:34.052336" elapsed="0.000203"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:34.084951" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:34.053139" elapsed="0.032033"/>
</kw>
<msg time="2026-10-06T01:29:34.085336" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:34.085378" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.052710" elapsed="0.032704"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:34.190549" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "d "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:34.086070" elapsed="0.104709"/>
</kw>
<msg time="2026-10-06T01:29:34.190942" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:34.190984" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.085583" elapsed="0.105435"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.191319" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:34.191109" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.191089" elapsed="0.000366"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:34.192005" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "d "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:34.191638" elapsed="0.000470"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.192371" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:34.192171" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.192154" elapsed="0.000310"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:34.192495" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:34.194973" elapsed="0.000502"/>
</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-10-06T01:29:34.196713" elapsed="0.000463"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:34.198339" elapsed="0.000305"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:34.193308" elapsed="0.005426"/>
</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-10-06T01:29:34.192797" elapsed="0.006054"/>
</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="PASS" start="2026-10-06T01:29:34.051327" elapsed="0.147602"/>
</kw>
<msg time="2026-10-06T01:29:34.199013" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:34.199070" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.050717" elapsed="0.148389"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:34.199263" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:34.199177" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.199159" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:29:34.199657" elapsed="0.000331"/>
</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-10-06T01:29:34.200314" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:34.200380" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:29:34.050107" elapsed="0.150360"/>
</kw>
<msg time="2026-10-06T01:29:34.200552" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:34.200591" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.048271" elapsed="0.152359"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.200947" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:34.200724" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.200707" elapsed="0.000312"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:34.048132" elapsed="0.152924"/>
</iter>
<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-10-06T01:29:34.203590" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:34.203506" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.203488" elapsed="0.000165"/>
</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-10-06T01:29:34.204778" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:34.204659" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.204642" elapsed="0.000200"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:34.205230" level="INFO">${karaf_connection_index} = 390</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-10-06T01:29:34.204986" elapsed="0.000269"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:34.205618" 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-10-06T01:29:34.205428" elapsed="0.000274"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:34.238945" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:34.206294" elapsed="0.032871"/>
</kw>
<msg time="2026-10-06T01:29:34.239337" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:34.239381" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.205861" elapsed="0.033557"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:34.317699" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "d "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:34.240064" elapsed="0.077830"/>
</kw>
<msg time="2026-10-06T01:29:34.318074" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:34.318118" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.239590" elapsed="0.078563"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.318438" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:34.318227" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.318208" elapsed="0.000327"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:34.319111" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "d "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:34.318742" elapsed="0.000457"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.319463" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:34.319262" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.319245" elapsed="0.000312"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:34.319588" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:34.322128" elapsed="0.000481"/>
</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-10-06T01:29:34.323877" elapsed="0.000475"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:34.325572" elapsed="0.000360"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:34.320399" elapsed="0.005600"/>
</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-10-06T01:29:34.319880" elapsed="0.006254"/>
</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="PASS" start="2026-10-06T01:29:34.204400" elapsed="0.121814"/>
</kw>
<msg time="2026-10-06T01:29:34.326299" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:34.326340" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.203816" elapsed="0.122561"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:34.326533" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:34.326447" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.326430" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.327159" elapsed="0.000025"/>
</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-10-06T01:29:34.327467" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:34.327533" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:29:34.203214" elapsed="0.124455"/>
</kw>
<msg time="2026-10-06T01:29:34.327785" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:34.327826" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.201309" elapsed="0.126554"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.328173" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:34.327935" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.327918" elapsed="0.000332"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:34.201169" elapsed="0.127102"/>
</iter>
<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-10-06T01:29:34.330930" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:34.330843" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.330825" elapsed="0.000169"/>
</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-10-06T01:29:34.332146" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:34.332059" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.332042" elapsed="0.000169"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:34.332582" level="INFO">${karaf_connection_index} = 392</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-10-06T01:29:34.332352" elapsed="0.000256"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:34.333054" 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-10-06T01:29:34.332851" elapsed="0.000229"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:34.365991" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:34.333657" elapsed="0.032534"/>
</kw>
<msg time="2026-10-06T01:29:34.366356" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:34.366399" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.333237" elapsed="0.033198"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:34.448348" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "d "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:34.367072" elapsed="0.081470"/>
</kw>
<msg time="2026-10-06T01:29:34.448732" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:34.448776" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.366603" elapsed="0.082210"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.449107" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:34.448886" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.448868" elapsed="0.000338"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:34.449751" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "d "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:34.449388" elapsed="0.000447"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.450113" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:34.449899" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.449882" elapsed="0.000327"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:34.450240" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:34.452790" elapsed="0.000495"/>
</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-10-06T01:29:34.454570" elapsed="0.000536"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:34.456507" elapsed="0.000336"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:34.451056" elapsed="0.005855"/>
</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-10-06T01:29:34.450509" elapsed="0.006534"/>
</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="PASS" start="2026-10-06T01:29:34.331778" elapsed="0.125344"/>
</kw>
<msg time="2026-10-06T01:29:34.457208" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:34.457249" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.331159" elapsed="0.126127"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:34.457443" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:34.457356" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.457339" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.457932" elapsed="0.000024"/>
</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-10-06T01:29:34.458290" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:34.458357" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:29:34.330523" elapsed="0.127921"/>
</kw>
<msg time="2026-10-06T01:29:34.458531" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:34.458572" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.328523" elapsed="0.130086"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.458918" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:34.458697" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.458663" elapsed="0.000328"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:34.328384" elapsed="0.130628"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:34.047974" elapsed="0.411080"/>
</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-10-06T01:29:34.045820" elapsed="0.413288"/>
</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-10-06T01:29:34.043902" elapsed="0.415259"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.043492" elapsed="0.415711"/>
</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-10-06T01:29:34.042481" elapsed="0.416777"/>
</kw>
<kw name="Delete Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:29:34.463527" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Delete bridge br01 in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:29:34.462276" elapsed="0.001286">Variable '${original_owner}' not found.</status>
</kw>
<doc>Delete bridge in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:29:34.041896" elapsed="0.421805">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t44" name="Cleans Up Test Environment For Next Suite" line="206">
<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-10-06T01:29:34.465199" elapsed="0.000201"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:29:34.464941" elapsed="0.000509"/>
</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-10-06T01:29:34.466365" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:34.466278" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.466260" elapsed="0.000169"/>
</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-10-06T01:29:34.468322" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:34.468237" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.468220" elapsed="0.000164"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:34.469307" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:34.468965" elapsed="0.000402"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:34.469814" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:34.469522" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:34.469880" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:29:34.470008" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:34.468591" elapsed="0.001455"/>
</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-10-06T01:29:34.472553" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:34.472468" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.472450" elapsed="0.000166"/>
</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-10-06T01:29:34.473748" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:34.473636" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.473619" elapsed="0.000191"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:34.474197" level="INFO">${karaf_connection_index} = 388</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-10-06T01:29:34.473953" elapsed="0.000269"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:34.474564" 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-10-06T01:29:34.474384" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:34.508805" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:34.475191" elapsed="0.033817"/>
</kw>
<msg time="2026-10-06T01:29:34.509182" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:34.509224" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.474761" elapsed="0.034498"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:34.581383" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "l "e "a "n "s "[C "U "p "[C "T "e "s "t "[C "E "n "v "i "r "o "n "m "[78Ce "[A[78Cn
 "t "[C "F "o "r "[C "N "e "x "t "[C "S "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:34.509871" elapsed="0.071705"/>
</kw>
<msg time="2026-10-06T01:29:34.581759" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:34.581801" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.509423" elapsed="0.072413"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.582135" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:34.581910" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.581891" elapsed="0.000341"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:34.582784" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "l "e "a "n "s "[C "U "p "[C "T "e "s "t "[C "E "n "v "i "r "o "n "m "[78Ce "[A[78Cn
 "t "[C "F "o "r "[C "N "e "x "t "[C "S "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:34.582416" elapsed="0.000454"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.583146" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:34.582931" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.582915" elapsed="0.000326"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:34.583272" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:34.585760" elapsed="0.000496"/>
</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-10-06T01:29:34.587483" elapsed="0.000491"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:34.589232" elapsed="0.000316"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:34.584083" elapsed="0.005531"/>
</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-10-06T01:29:34.583541" elapsed="0.006208"/>
</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="PASS" start="2026-10-06T01:29:34.473377" elapsed="0.116449"/>
</kw>
<msg time="2026-10-06T01:29:34.589907" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:34.589947" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.472783" elapsed="0.117200"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:34.590158" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:34.590070" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.590052" elapsed="0.000184"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:29:34.590555" elapsed="0.000024"/>
</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-10-06T01:29:34.590875" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:34.590941" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:29:34.472177" elapsed="0.118864"/>
</kw>
<msg time="2026-10-06T01:29:34.591125" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:34.591165" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.470376" elapsed="0.120824"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.591487" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:34.591268" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.591252" elapsed="0.000306"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:34.470238" elapsed="0.121340"/>
</iter>
<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-10-06T01:29:34.594308" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:34.594223" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.594206" elapsed="0.000167"/>
</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-10-06T01:29:34.595476" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:34.595391" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.595374" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:34.595946" level="INFO">${karaf_connection_index} = 390</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-10-06T01:29:34.595713" elapsed="0.000258"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:34.596327" 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-10-06T01:29:34.596147" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:34.627412" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:34.596931" elapsed="0.030683"/>
</kw>
<msg time="2026-10-06T01:29:34.627806" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:34.627847" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.596503" elapsed="0.031380"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:34.692694" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "l "e "a "n "s "[C "U "p "[C "T "e "s "t "[C "E "n "v "i "r "o "n "m "[78Ce "[A[78Cn
 "t "[C "F "o "r "[C "N "e "x "t "[C "S "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:34.628485" elapsed="0.064400"/>
</kw>
<msg time="2026-10-06T01:29:34.693080" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:34.693124" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.628064" elapsed="0.065135"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.693490" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:34.693277" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.693258" elapsed="0.000328"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:34.694154" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "l "e "a "n "s "[C "U "p "[C "T "e "s "t "[C "E "n "v "i "r "o "n "m "[78Ce "[A[78Cn
 "t "[C "F "o "r "[C "N "e "x "t "[C "S "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:34.693793" elapsed="0.000444"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.694496" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:34.694298" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.694281" elapsed="0.000309"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:34.694621" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:34.697103" elapsed="0.000471"/>
</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-10-06T01:29:34.698807" elapsed="0.000463"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:34.700430" elapsed="0.000319"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:34.695431" elapsed="0.005383"/>
</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-10-06T01:29:34.694915" elapsed="0.006016"/>
</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="PASS" start="2026-10-06T01:29:34.595129" elapsed="0.105880"/>
</kw>
<msg time="2026-10-06T01:29:34.701142" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:34.701181" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.594520" elapsed="0.106696"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:34.701370" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:34.701285" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.701268" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.701795" elapsed="0.000024"/>
</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-10-06T01:29:34.702112" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:34.702177" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:29:34.593912" elapsed="0.108351"/>
</kw>
<msg time="2026-10-06T01:29:34.702347" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:34.702386" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.591852" elapsed="0.110569"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.702746" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:34.702490" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.702474" elapsed="0.000349"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:34.591713" elapsed="0.111131"/>
</iter>
<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-10-06T01:29:34.705486" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:34.705401" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.705383" elapsed="0.000165"/>
</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-10-06T01:29:34.706656" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:34.706572" elapsed="0.000360"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.706556" elapsed="0.000401"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:34.707379" level="INFO">${karaf_connection_index} = 392</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-10-06T01:29:34.707150" elapsed="0.000254"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:34.707759" 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-10-06T01:29:34.707564" elapsed="0.000220"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:34.748053" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:34.708366" elapsed="0.039877"/>
</kw>
<msg time="2026-10-06T01:29:34.748407" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:34.748449" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.707939" elapsed="0.040545"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:34.822195" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "l "e "a "n "s "[C "U "p "[C "T "e "s "t "[C "E "n "v "i "r "o "n "m "[78Ce "[A[78Cn
 "t "[C "F "o "r "[C "N "e "x "t "[C "S "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:34.749139" elapsed="0.073241"/>
</kw>
<msg time="2026-10-06T01:29:34.822539" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:34.822580" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.748651" elapsed="0.073964"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.822911" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:34.822704" elapsed="0.000277"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.822668" elapsed="0.000337"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:34.823572" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "C "l "e "a "n "s "[C "U "p "[C "T "e "s "t "[C "E "n "v "i "r "o "n "m "[78Ce "[A[78Cn
 "t "[C "F "o "r "[C "N "e "x "t "[C "S "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:34.823236" elapsed="0.000416"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.823936" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:34.823738" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.823720" elapsed="0.000324"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:34.824076" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:34.826517" elapsed="0.000518"/>
</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-10-06T01:29:34.828251" elapsed="0.000469"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:34.829901" elapsed="0.000317"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:34.824854" elapsed="0.005429"/>
</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-10-06T01:29:34.824341" elapsed="0.006056"/>
</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="PASS" start="2026-10-06T01:29:34.706317" elapsed="0.124156"/>
</kw>
<msg time="2026-10-06T01:29:34.830554" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:34.830594" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.705722" elapsed="0.124907"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:34.830837" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:34.830751" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.830732" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.831244" elapsed="0.000024"/>
</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-10-06T01:29:34.831583" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:34.831648" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:29:34.705105" elapsed="0.126924"/>
</kw>
<msg time="2026-10-06T01:29:34.832118" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:34.832158" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "O "v "s "d "b "[C "S "o "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.703107" elapsed="0.129086"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.832480" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:34.832263" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.832247" elapsed="0.000304"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:34.702953" elapsed="0.129619"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:34.470096" elapsed="0.362503"/>
</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-10-06T01:29:34.467927" elapsed="0.364725"/>
</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-10-06T01:29:34.466003" elapsed="0.366723"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:34.465593" elapsed="0.367176"/>
</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-10-06T01:29:34.464582" elapsed="0.368236"/>
</kw>
<kw name="Configure Exit OVSDB Connection" owner="ClusterOvsdb">
<kw name="Clean OVSDB Test Environment" owner="OVSDB">
<kw name="Clean Mininet System" owner="Utils">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:34.835939" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:34.835703" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:34.835670" elapsed="0.000372"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:34.836369" 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-10-06T01:29:34.836461" 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-10-06T01:29:34.836239" elapsed="0.000247"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:34.836976" level="INFO">Attempting to execute command "sudo mn -c" on remote system "10.30.170.234" 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-10-06T01:29:34.836672" elapsed="0.000360"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:34.837511" level="INFO">${conn_id} = 579</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-10-06T01:29:34.837209" elapsed="0.000326"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:29:34.838387" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:29:34.838455" 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-10-06T01:29:34.838123" elapsed="0.000354"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:34.838625" elapsed="0.000302"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:29:34.839732" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:29:35.219442" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:29:15 UTC 2026

  System load:  0.0                Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:29:20 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:29:34.839486" elapsed="0.380082"/>
</kw>
<msg time="2026-10-06T01:29:35.219744" 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-10-06T01:29:34.839121" elapsed="0.380715"/>
</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-10-06T01:29:34.837750" elapsed="0.382201"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:29:35.220481" level="INFO">Executing command 'sudo mn -c'.</msg>
<msg time="2026-10-06T01:29:36.400105" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:29:36.400367" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:29:36.400463" level="INFO">${stderr} = *** Removing excess controllers/ofprotocols/ofdatapaths/pings/noxes
killall controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec iv...</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-10-06T01:29:35.220259" elapsed="1.180257"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:36.400971" elapsed="0.000573"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:36.402724" level="INFO">*** Removing excess controllers/ofprotocols/ofdatapaths/pings/noxes
killall controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec ivs ryu-manager 2&gt; /dev/null
killall -9 controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec ivs ryu-manager 2&gt; /dev/null
pkill -9 -f "sudo mnexec"
*** Removing junk from /tmp
rm -f /tmp/vconn* /tmp/vlogs* /tmp/*.out /tmp/*.log
*** Removing old X11 tunnels
*** Removing excess kernel datapaths
ps ax | egrep -o 'dp[0-9]+' | sed 's/dp/nl:/'
***  Removing OVS datapaths
ovs-vsctl --timeout=1 list-br
ovs-vsctl --timeout=1 list-br
*** Removing all links of the pattern foo-ethX
ip link show | egrep -o '([-_.[:alnum:]]+-eth[[:digit:]]+)'
ip link show
*** Killing stale mininet node processes
pkill -9 -f mininet:
*** Shutting down stale tunnels
pkill -9 -f Tunnel=Ethernet
pkill -9 -f .ssh/mn
rm -f ~/.ssh/mn/*
*** Cleanup complete.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:36.402127" elapsed="0.000715"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:36.403251" elapsed="0.000064"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:36.403020" elapsed="0.000381"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:36.402953" elapsed="0.000499"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:29:36.403783" elapsed="0.000058"/>
</return>
<status status="PASS" start="2026-10-06T01:29:36.403561" elapsed="0.000349"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:36.403529" elapsed="0.000434"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:36.404059" elapsed="0.000032"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:36.405734" elapsed="0.003717"/>
</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-10-06T01:29:36.409913" elapsed="0.000351"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:36.410584" elapsed="0.000238"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:36.404776" elapsed="0.006156"/>
</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-10-06T01:29:34.835264" elapsed="1.575851"/>
</kw>
<msg time="2026-10-06T01:29:36.411223" 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-10-06T01:29:34.834500" elapsed="1.576829"/>
</kw>
<arg>${system}</arg>
<arg>sudo mn -c</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:29:34.834089" elapsed="1.577398"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:36.416141" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:36.415555" elapsed="0.000707"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:36.415515" elapsed="0.000799"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:36.417064" 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-10-06T01:29:36.417273" 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-10-06T01:29:36.416768" elapsed="0.000560"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:36.418501" level="INFO">Attempting to execute command "sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh" on remote system "10.30.170.234" 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-10-06T01:29:36.417793" elapsed="0.000923"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:36.419913" level="INFO">${conn_id} = 581</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-10-06T01:29:36.419176" elapsed="0.000794"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:29:36.421990" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:29:36.422172" 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-10-06T01:29:36.421395" elapsed="0.000828"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:36.422555" elapsed="0.000698"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:29:36.425176" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:29:36.823318" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:29:15 UTC 2026

  System load:  0.0                Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:29:35 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:29:36.424500" elapsed="0.398916"/>
</kw>
<msg time="2026-10-06T01:29:36.823479" 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-10-06T01:29:36.423621" elapsed="0.399926"/>
</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-10-06T01:29:36.420460" elapsed="0.403178"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:29:36.824061" level="INFO">Executing command 'sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh'.</msg>
<msg time="2026-10-06T01:29:36.856890" level="INFO">Command exited with return code -1.</msg>
<msg time="2026-10-06T01:29:36.857051" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:29:36.857108" level="INFO">${stderr} = </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-10-06T01:29:36.823872" elapsed="0.033268"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:36.857360" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:36.858352" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:36.858005" elapsed="0.000402"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:36.858642" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:36.858504" elapsed="0.000225"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:36.858474" elapsed="0.000287"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:29:36.858952" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-10-06T01:29:36.858830" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:36.858810" elapsed="0.000270"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:36.859124" elapsed="0.000019"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:36.860431" elapsed="0.000416"/>
</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-10-06T01:29:36.861121" elapsed="0.000194"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:36.861512" elapsed="0.000129"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:36.859857" elapsed="0.001875"/>
</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-10-06T01:29:36.414172" elapsed="0.447660"/>
</kw>
<msg time="2026-10-06T01:29:36.861899" 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-10-06T01:29:36.412948" elapsed="0.449018"/>
</kw>
<arg>${system}</arg>
<arg>sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:29:36.411944" elapsed="0.450137"/>
</kw>
<arg>${tools_system}</arg>
<status status="PASS" start="2026-10-06T01:29:34.833761" elapsed="2.028454"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:36.864803" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:36.864454" elapsed="0.000423"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:36.864430" elapsed="0.000480"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:36.865365" 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-10-06T01:29:36.865493" 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-10-06T01:29:36.865193" elapsed="0.000335"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:36.866235" level="INFO">Attempting to execute command "sudo ovs-vsctl del-manager" on remote system "10.30.170.234" 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-10-06T01:29:36.865811" elapsed="0.000485"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:36.866977" level="INFO">${conn_id} = 583</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-10-06T01:29:36.866542" elapsed="0.000484"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:29:36.868179" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:29:36.868276" 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-10-06T01:29:36.867816" elapsed="0.000491"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:36.868516" elapsed="0.000419"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:29:36.870044" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:29:37.313066" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:29:15 UTC 2026

  System load:  0.0                Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:29:36 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:29:36.869708" elapsed="0.443458"/>
</kw>
<msg time="2026-10-06T01:29:37.313230" 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-10-06T01:29:36.869179" elapsed="0.444117"/>
</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-10-06T01:29:36.867297" elapsed="0.446087"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:29:37.313790" level="INFO">Executing command 'sudo ovs-vsctl del-manager'.</msg>
<msg time="2026-10-06T01:29:37.347360" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:29:37.347536" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:29:37.347594" level="INFO">${stderr} = </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-10-06T01:29:37.313604" elapsed="0.034022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:37.347899" elapsed="0.000334"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:37.348927" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:37.348550" elapsed="0.000433"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:37.349250" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:37.349102" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:37.349069" elapsed="0.000274"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:29:37.349529" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-10-06T01:29:37.349411" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:37.349391" elapsed="0.000253"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:37.349709" elapsed="0.000019"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:37.350754" elapsed="0.000426"/>
</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-10-06T01:29:37.351438" elapsed="0.000306"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:37.351949" elapsed="0.000146"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:37.350144" elapsed="0.002020"/>
</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-10-06T01:29:36.863844" elapsed="0.488421"/>
</kw>
<msg time="2026-10-06T01:29:37.352335" 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-10-06T01:29:36.863089" elapsed="0.489319"/>
</kw>
<arg>${tools_system}</arg>
<arg>sudo ovs-vsctl del-manager</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:29:36.862456" elapsed="0.490065"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:37.355199" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:37.354848" elapsed="0.000426"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:37.354820" elapsed="0.000488"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:37.355775" 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-10-06T01:29:37.355906" 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-10-06T01:29:37.355580" elapsed="0.000361"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:37.356629" level="INFO">Attempting to execute command "sudo /usr/share/openvswitch/scripts/ovs-ctl stop" on remote system "10.30.170.234" 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-10-06T01:29:37.356218" elapsed="0.000495"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:37.357400" level="INFO">${conn_id} = 585</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-10-06T01:29:37.356959" elapsed="0.000477"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:29:37.358623" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:29:37.358746" 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-10-06T01:29:37.358269" elapsed="0.000510"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:37.359005" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:29:37.360509" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:29:37.787080" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:29:15 UTC 2026

  System load:  0.0                Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:29:37 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:29:37.360185" elapsed="0.426998"/>
</kw>
<msg time="2026-10-06T01:29:37.787254" 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-10-06T01:29:37.359639" elapsed="0.427688"/>
</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-10-06T01:29:37.357743" elapsed="0.429678"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:29:37.787853" level="INFO">Executing command 'sudo /usr/share/openvswitch/scripts/ovs-ctl stop'.</msg>
<msg time="2026-10-06T01:29:37.941508" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:29:37.941779" level="INFO">${stdout} =  * Exiting ovs-vswitchd (5738)
 * Exiting ovsdb-server (5721)</msg>
<msg time="2026-10-06T01:29:37.941871" level="INFO">${stderr} = </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-10-06T01:29:37.787655" elapsed="0.154263"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:37.942404" elapsed="0.000453"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:37.943942" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:37.943370" elapsed="0.000687"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:37.944443" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:37.944221" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:37.944171" elapsed="0.000421"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:29:37.944923" elapsed="0.000054"/>
</return>
<status status="PASS" start="2026-10-06T01:29:37.944730" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:37.944666" elapsed="0.000453"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:37.945188" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:37.946840" elapsed="0.000651"/>
</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-10-06T01:29:37.947934" elapsed="0.000371"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:37.948615" elapsed="0.000233"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:37.945863" elapsed="0.003090"/>
</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-10-06T01:29:37.354214" elapsed="0.594916"/>
</kw>
<msg time="2026-10-06T01:29:37.949237" 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-10-06T01:29:37.353420" elapsed="0.595921"/>
</kw>
<arg>${tools_system}</arg>
<arg>sudo /usr/share/openvswitch/scripts/ovs-ctl stop</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:29:37.352798" elapsed="0.596707"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:37.953774" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:37.953215" elapsed="0.000678"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:37.953173" elapsed="0.000771"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:37.954664" 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-10-06T01:29:37.954906" 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-10-06T01:29:37.954393" elapsed="0.000566"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:37.956093" level="INFO">Attempting to execute command "sudo rm -rf /etc/openvswitch/conf.db" on remote system "10.30.170.234" 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-10-06T01:29:37.955398" elapsed="0.000790"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:37.957289" level="INFO">${conn_id} = 587</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-10-06T01:29:37.956575" elapsed="0.000768"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:29:37.959292" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:29:37.959448" 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-10-06T01:29:37.958654" elapsed="0.000842"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:37.959857" elapsed="0.000674"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:29:37.962315" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:29:38.403767" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:29:15 UTC 2026

  System load:  0.0                Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:29:37 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:29:37.961777" elapsed="0.442164"/>
</kw>
<msg time="2026-10-06T01:29:38.404023" 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-10-06T01:29:37.960921" elapsed="0.443172"/>
</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-10-06T01:29:37.957803" elapsed="0.446383"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:29:38.404564" level="INFO">Executing command 'sudo rm -rf /etc/openvswitch/conf.db'.</msg>
<msg time="2026-10-06T01:29:38.427310" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:29:38.427568" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:29:38.427659" level="INFO">${stderr} = </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-10-06T01:29:38.404406" elapsed="0.023341"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:38.428129" elapsed="0.000443"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:38.429335" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:38.429001" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:38.429625" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:38.429488" elapsed="0.000223"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:38.429457" elapsed="0.000286"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:29:38.429934" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-10-06T01:29:38.429812" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:38.429791" elapsed="0.000271"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:38.430105" elapsed="0.000019"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:38.431117" elapsed="0.000398"/>
</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-10-06T01:29:38.431793" elapsed="0.000217"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:38.432209" elapsed="0.000127"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:38.430514" elapsed="0.001887"/>
</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-10-06T01:29:37.952209" elapsed="0.480291"/>
</kw>
<msg time="2026-10-06T01:29:38.432566" 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-10-06T01:29:37.950926" elapsed="0.481707"/>
</kw>
<arg>${tools_system}</arg>
<arg>sudo rm -rf /etc/openvswitch/conf.db</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:29:37.949934" elapsed="0.482830"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:38.435371" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:38.435034" elapsed="0.000411"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:38.435006" elapsed="0.000470"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:38.435943" 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-10-06T01:29:38.436089" 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-10-06T01:29:38.435769" elapsed="0.000355"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:38.436810" level="INFO">Attempting to execute command "sudo /usr/share/openvswitch/scripts/ovs-ctl start" on remote system "10.30.170.234" 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-10-06T01:29:38.436388" elapsed="0.000482"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:38.437544" level="INFO">${conn_id} = 589</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-10-06T01:29:38.437132" elapsed="0.000446"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:29:38.438742" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:29:38.438841" 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-10-06T01:29:38.438383" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:38.439150" elapsed="0.000403"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:29:38.440651" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:29:38.826837" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:29:15 UTC 2026

  System load:  0.0                Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:29:38 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:29:38.440333" elapsed="0.386587"/>
</kw>
<msg time="2026-10-06T01:29:38.826992" 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-10-06T01:29:38.439801" elapsed="0.387247"/>
</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-10-06T01:29:38.437865" elapsed="0.389260"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:29:38.827479" level="INFO">Executing command 'sudo /usr/share/openvswitch/scripts/ovs-ctl start'.</msg>
<msg time="2026-10-06T01:29:38.981399" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:29:38.981631" level="INFO">${stdout} =  * /etc/openvswitch/conf.db does not exist
 * Creating empty database /etc/openvswitch/conf.db
 * Starting ovsdb-server
 * system ID not configured, please use --system-id
 * Configuring Open vSwitch ...</msg>
<msg time="2026-10-06T01:29:38.981766" level="INFO">${stderr} = </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-10-06T01:29:38.827330" elapsed="0.154486"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:38.982197" elapsed="0.000445"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:38.983704" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:38.983154" elapsed="0.000639"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:38.984173" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:38.983941" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:38.983897" elapsed="0.000420"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:29:38.984600" elapsed="0.000053"/>
</return>
<status status="PASS" start="2026-10-06T01:29:38.984420" elapsed="0.000333"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:38.984390" elapsed="0.000414"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:38.984873" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:38.986425" elapsed="0.000674"/>
</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-10-06T01:29:38.987503" elapsed="0.000334"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:38.988179" elapsed="0.000196"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:38.985512" elapsed="0.002966"/>
</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-10-06T01:29:38.434401" elapsed="0.554225"/>
</kw>
<msg time="2026-10-06T01:29:38.988763" 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-10-06T01:29:38.433624" elapsed="0.555240"/>
</kw>
<arg>${tools_system}</arg>
<arg>sudo /usr/share/openvswitch/scripts/ovs-ctl start</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:29:38.433031" elapsed="0.556007"/>
</kw>
<arg>${TOOLS_SYSTEM_IP}</arg>
<doc>General Use Keyword attempting to sanitize test environment for OVSDB related
tests. Not every step will always be neccessary, but should not cause any problems for
any new ovsdb test suites.</doc>
<status status="PASS" start="2026-10-06T01:29:34.833406" elapsed="4.155746"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:29:38.990291" level="INFO">${dictionary} = {'ovsdb://uuid': '0'}</msg>
<var>${dictionary}</var>
<arg>ovsdb://uuid=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:29:38.989577" elapsed="0.000769"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:38.997902" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:38.997128" elapsed="0.000830"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:38.998958" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:38.998319" elapsed="0.000718"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:38.999129" elapsed="0.000060"/>
</return>
<msg time="2026-10-06T01:29:38.999413" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:38.996201" elapsed="0.003264"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.005822" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:29:39.005186" elapsed="0.000692"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:39.005988" elapsed="0.000060"/>
</return>
<msg time="2026-10-06T01:29:39.006263" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:39.004416" elapsed="0.001897"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.009004" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:39.008454" elapsed="0.000644"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.010055" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:39.009514" elapsed="0.000630"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:39.021606" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01vnneqvwkldju3nk2nwxnp4cb2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:39.021946" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '144'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:29:39.022219" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:39.010811" elapsed="0.011463"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:39.010280" elapsed="0.012083"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:39.022794" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:39.022418" elapsed="0.000507"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:39.010242" elapsed="0.012748"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.026128" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:39.025338" elapsed="0.000892"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:39.024778" elapsed="0.001522"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:39.024735" elapsed="0.001616"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.027718" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:39.027040" elapsed="0.000774"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:39.026464" elapsed="0.001419"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:39.026430" elapsed="0.001503"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.029194" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:39.028337" elapsed="0.000914"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:39.029879" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:39.029395" elapsed="0.000627"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.031073" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:39.030418" elapsed="0.000710"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:39.030073" elapsed="0.001129"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:39.029356" elapsed="0.001891"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.032430" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:39.031623" elapsed="0.000861"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:39.033221" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:39.032736" elapsed="0.000632"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.034739" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:39.033898" elapsed="0.000921"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:39.033420" elapsed="0.001503"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:39.032662" elapsed="0.002351"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:39.035401" elapsed="0.001021"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:29:39.037427" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:39.036884" elapsed="0.000599"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:29:39.037848" elapsed="0.000501"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:29:39.023749" elapsed="0.014726"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:29:39.038862" elapsed="0.000056"/>
</return>
<status status="PASS" start="2026-10-06T01:29:39.038645" elapsed="0.000364"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:39.038606" elapsed="0.000454"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:39.039375" elapsed="0.000044"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:29:39.039516" elapsed="0.000033"/>
</return>
<msg time="2026-10-06T01:29:39.040058" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:29:39.007042" elapsed="0.033079"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:29:39.040224" elapsed="0.000056"/>
</return>
<msg time="2026-10-06T01:29:39.040494" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:29:39.003434" elapsed="0.037118"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.043310" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:39.042197" elapsed="0.001255"/>
</kw>
<var name="${item}">ovsdb://uuid</var>
<status status="PASS" start="2026-10-06T01:29:39.041823" elapsed="0.001711"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:29:39.041560" elapsed="0.002038"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:29:39.041060" elapsed="0.002679"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:38.999895" elapsed="0.043915"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.048516" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:39.048141" elapsed="0.000410"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:39.048610" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:29:39.048802" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:39.047655" elapsed="0.001179"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.050444" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:39.050136" elapsed="0.000365"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.051098" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:39.050779" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:39.065003" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01wo4j9u7mox61tr0ncscuykk72.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:39.065146" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:29:39.065323" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:39.051550" elapsed="0.013808"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:39.051238" elapsed="0.014176"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:39.065662" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:39.065448" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:39.051215" elapsed="0.014583"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.067557" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:39.067104" elapsed="0.000512"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:39.066756" elapsed="0.000904"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:39.066730" elapsed="0.000982"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.068500" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:39.068127" elapsed="0.000429"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:39.067785" elapsed="0.000814"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:39.067763" elapsed="0.000868"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.069377" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:39.068886" elapsed="0.000527"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:39.069805" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:39.069502" elapsed="0.000377"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.070510" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:39.070143" elapsed="0.000400"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:39.069910" elapsed="0.000679"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:39.069479" elapsed="0.001138"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.071357" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:39.070869" elapsed="0.000523"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:39.071780" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:39.071481" elapsed="0.000371"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.072474" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:39.072113" elapsed="0.000395"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:39.071883" elapsed="0.000670"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:39.071458" elapsed="0.001122"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:39.072795" elapsed="0.000417"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:29:39.073751" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:39.073427" elapsed="0.000359"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:29:39.074007" elapsed="0.000291"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:29:39.066263" elapsed="0.008111"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:29:39.074572" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-10-06T01:29:39.074461" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:39.074438" elapsed="0.000259"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:39.074892" elapsed="0.000027"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:29:39.074994" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:29:39.075294" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:29:39.049262" elapsed="0.026068"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:29:39.075392" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:29:39.075558" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:29:39.047080" elapsed="0.028510"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.077309" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:39.076858" elapsed="0.000536"/>
</kw>
<var name="${item}">ovsdb://uuid</var>
<status status="PASS" start="2026-10-06T01:29:39.076412" elapsed="0.001033"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:29:39.076270" elapsed="0.001213"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:29:39.075939" elapsed="0.001611"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:39.044009" elapsed="0.033584"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.081177" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:39.080786" elapsed="0.000426"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:39.081271" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:29:39.081441" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:39.080323" elapsed="0.001149"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.083109" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:39.082786" elapsed="0.000381"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.083747" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:39.083429" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:39.096766" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node08kx9y5d080lbj5jl4gkt6rg2.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:39.096908" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:29:39.097058" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:39.084214" elapsed="0.012879"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:39.083889" elapsed="0.013258"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:39.097391" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:39.097180" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:39.083866" elapsed="0.013633"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.099286" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:39.098815" elapsed="0.000530"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:39.098459" elapsed="0.000930"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:39.098434" elapsed="0.000987"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.100228" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:39.099840" elapsed="0.000444"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:39.099492" elapsed="0.000835"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:39.099471" elapsed="0.000888"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.101108" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:39.100592" elapsed="0.000552"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:39.101514" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:39.101233" elapsed="0.000353"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.102232" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:39.101852" elapsed="0.000414"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:39.101617" elapsed="0.000694"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:39.101210" elapsed="0.001129"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.103079" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:39.102571" elapsed="0.000545"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:39.103481" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:39.103205" elapsed="0.000348"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.104260" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:39.103871" elapsed="0.000425"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:39.103627" elapsed="0.000716"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:39.103182" elapsed="0.001190"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:39.104566" elapsed="0.000457"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:29:39.105542" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:29:39.105242" elapsed="0.000334"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:29:39.105812" elapsed="0.000308"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:29:39.097983" elapsed="0.008216"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:29:39.106398" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:29:39.106286" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:39.106262" elapsed="0.000243"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:39.106737" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:29:39.106829" elapsed="0.000021"/>
</return>
<msg time="2026-10-06T01:29:39.107149" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:29:39.081900" elapsed="0.025284"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:29:39.107248" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:29:39.107416" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:29:39.079737" elapsed="0.027711"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.109125" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:29:39.108658" elapsed="0.000553"/>
</kw>
<var name="${item}">ovsdb://uuid</var>
<status status="PASS" start="2026-10-06T01:29:39.108438" elapsed="0.000824"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:29:39.108087" elapsed="0.001212"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:29:39.107754" elapsed="0.001611"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:39.077726" elapsed="0.031683"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:38.999582" elapsed="0.109861"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary {'ovsdb://uuid': '0'}.</doc>
<status status="PASS" start="2026-10-06T01:29:38.995094" elapsed="0.114413"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:29:38.990811" elapsed="0.118763"/>
</kw>
<doc>Cleans up test environment, close existing sessions.</doc>
<status status="PASS" start="2026-10-06T01:29:34.833010" elapsed="4.276647"/>
</kw>
<doc>Cleans up test environment, close existing sessions in teardown.</doc>
<status status="PASS" start="2026-10-06T01:29:34.464063" elapsed="4.645772"/>
</test>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<msg time="2026-10-06T01:29:39.110874" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects </doc>
<status status="PASS" start="2026-10-06T01:29:39.110767" elapsed="0.000357"/>
</kw>
<doc>Test suite for Ovsdb Southbound Cluster - Owner failover and recover</doc>
<status status="FAIL" start="2026-10-06T01:26:43.383177" elapsed="175.728007"/>
</suite>
<suite id="s1-s2-s2" name="Southbound Cluster Extension" source="/w/workspace/ovsdb-csit-3node-upstream-clustering-only-chromium/test/csit/suites/ovsdb/Southbound_Cluster/020__Southbound_Cluster_Extension.robot">
<kw name="Suite Setup" 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-10-06T01:29:39.142371" level="INFO">${SuiteFastFail} = False</msg>
<arg>${SuiteFastFail}</arg>
<arg>False</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-10-06T01:29:39.140882" elapsed="0.001533"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-10-06T01:29:39.140615" elapsed="0.001855"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.144742" 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-10-06T01:29:39.143451" elapsed="0.001317"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-10-06T01:29:39.144953" elapsed="0.000026"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:39.144840" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:39.144821" elapsed="0.000206"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.145542" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-10-06T01:29:39.145216" elapsed="0.000366"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.146052" level="INFO">${cluster_size} = 3</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-10-06T01:29:39.145761" elapsed="0.000315"/>
</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-10-06T01:29:39.146578" elapsed="0.000272"/>
</kw>
<msg time="2026-10-06T01:29:39.146937" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:39.146992" level="INFO">${possibly_int_of_members} = 3</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:39.146245" elapsed="0.000769"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.147510" level="INFO">${int_of_members} = 3</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-10-06T01:29:39.147195" elapsed="0.000340"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.148402" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:39.148154" elapsed="0.000273"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.148827" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:39.148568" elapsed="0.000284"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.149314" 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-10-06T01:29:39.149048" elapsed="0.000290"/>
</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-10-06T01:29:39.150223" elapsed="0.000158"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.150843" level="INFO">${member_ip} = 10.30.171.109</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:39.150546" elapsed="0.000322"/>
</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-10-06T01:29:39.151057" elapsed="0.002017"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.153804" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:29:39.153520" elapsed="0.000309"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:39.153874" elapsed="0.000031"/>
</return>
<msg time="2026-10-06T01:29:39.154016" 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-10-06T01:29:39.153253" elapsed="0.000786"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:39.154532" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.171.109:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b840ea3b10&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-10-06T01:29:39.154211" elapsed="0.000437"/>
</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-10-06T01:29:39.154823" elapsed="0.000161"/>
</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-10-06T01:29:39.149756" elapsed="0.005283"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:39.149569" elapsed="0.005509"/>
</iter>
<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-10-06T01:29:39.155766" elapsed="0.000153"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.156363" level="INFO">${member_ip} = 10.30.171.171</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:39.156084" elapsed="0.000303"/>
</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-10-06T01:29:39.156549" elapsed="0.000181"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.157445" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:39.157179" elapsed="0.000291"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:39.157511" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:29:39.157635" level="INFO">${session_alias} = ClusterManagement__session_2</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-10-06T01:29:39.156905" elapsed="0.000753"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:39.158195" level="INFO">Creating Session using : alias=ClusterManagement__session_2, url=http://10.30.171.171:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b840fd48d0&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-10-06T01:29:39.157880" elapsed="0.000411"/>
</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-10-06T01:29:39.158451" elapsed="0.000146"/>
</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-10-06T01:29:39.155315" elapsed="0.003335"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:39.155154" elapsed="0.003553"/>
</iter>
<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-10-06T01:29:39.159397" elapsed="0.000145"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.160004" level="INFO">${member_ip} = 10.30.170.97</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:39.159709" elapsed="0.000320"/>
</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-10-06T01:29:39.160190" elapsed="0.000164"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.161073" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:39.160798" elapsed="0.000300"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:39.161138" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:29:39.161260" level="INFO">${session_alias} = ClusterManagement__session_3</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-10-06T01:29:39.160522" elapsed="0.000761"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:39.161762" level="INFO">Creating Session using : alias=ClusterManagement__session_3, url=http://10.30.170.97:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b840529790&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-10-06T01:29:39.161451" elapsed="0.000409"/>
</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-10-06T01:29:39.162031" elapsed="0.000146"/>
</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-10-06T01:29:39.158950" elapsed="0.003281"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:39.158786" elapsed="0.003483"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-10-06T01:29:39.149387" elapsed="0.012910"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.162849" level="INFO">${ClusterManagement__member_index_list} = [1, 2, 3]</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-10-06T01:29:39.162479" elapsed="0.000410"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.163600" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.171.109', 2: '10.30.171.171', 3: '10.30.170.97'}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-10-06T01:29:39.163082" elapsed="0.000560"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.164206" level="INFO">${ClusterManagement__session_list} = ['ClusterManagement__session_1', 'ClusterManagement__session_2', 'ClusterManagement__session_3']</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-10-06T01:29:39.163840" elapsed="0.000407"/>
</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-10-06T01:29:39.147766" elapsed="0.016534"/>
</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-10-06T01:29:39.143136" elapsed="0.021214"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-10-06T01:29:39.164497" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:39.164408" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:39.164391" elapsed="0.000167"/>
</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-10-06T01:29:39.165756" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:39.165419" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.166214" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:39.165930" elapsed="0.000308"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:39.166318" elapsed="0.000028"/>
</return>
<msg time="2026-10-06T01:29:39.166447" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:39.165124" elapsed="0.001347"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:39.167325" level="INFO">${member_ip} = 10.30.171.109</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-10-06T01:29:39.167120" elapsed="0.000229"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:39.168060" 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-10-06T01:29:39.168154" 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-10-06T01:29:39.167915" elapsed="0.000263"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:39.171322" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:39.170665" elapsed="0.000760"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:39.170623" elapsed="0.000879"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:39.172246" 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-10-06T01:29:39.172503" 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-10-06T01:29:39.171843" elapsed="0.000779"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.173512" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.171.109" 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-10-06T01:29:39.172959" elapsed="0.000707"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:39.174856" level="INFO">${conn_id} = 591</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-10-06T01:29:39.174010" elapsed="0.000976"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.176430" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:29:39.176501" 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-10-06T01:29:39.176058" elapsed="0.000465"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:39.176784" elapsed="0.000309"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:29:39.177924" level="INFO">Logging into '10.30.171.109:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:29:39.794363" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-194-generic x86_64)

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

 System information as of Tue Oct  6 01:29:39 UTC 2026

  System load:  0.01               Processes:             120
  Usage of /:   14.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.109
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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

New release '24.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:26:43 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:29:39.177668" elapsed="0.616823"/>
</kw>
<msg time="2026-10-06T01:29:39.794577" 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-10-06T01:29:39.177300" elapsed="0.617363"/>
</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-10-06T01:29:39.175352" elapsed="0.619629"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:29:39.796165" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-10-06T01:29:39.810075" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-10-06T01:29:39.810493" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:29:39.810782" 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-10-06T01:29:39.795487" elapsed="0.015567"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:39.811482" elapsed="0.000839"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.814196" 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-10-06T01:29:39.813316" elapsed="0.001123"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:39.815295" elapsed="0.000046"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:39.814667" elapsed="0.000738"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:39.814598" elapsed="0.000926"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:29:39.816143" elapsed="0.000091"/>
</return>
<status status="PASS" start="2026-10-06T01:29:39.815747" elapsed="0.000554"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:39.815662" elapsed="0.000761"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:39.816557" elapsed="0.000021"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:39.818539" elapsed="0.000706"/>
</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-10-06T01:29:39.819651" elapsed="0.000344"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:39.820339" elapsed="0.000227"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:39.817444" elapsed="0.003226"/>
</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-10-06T01:29:39.169832" elapsed="0.651289"/>
</kw>
<msg time="2026-10-06T01:29:39.821276" 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-10-06T01:29:39.169188" elapsed="0.652159"/>
</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-10-06T01:29:39.168794" elapsed="0.652655"/>
</kw>
<msg time="2026-10-06T01:29:39.821502" 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-10-06T01:29:39.168328" elapsed="0.653234"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:39.822457" elapsed="0.000488"/>
</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-10-06T01:29:39.823216" elapsed="0.000192"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:39.823602" elapsed="0.000151"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:39.821986" elapsed="0.001833"/>
</kw>
<msg time="2026-10-06T01:29:39.823935" 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-10-06T01:29:39.167547" elapsed="0.656436"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.824589" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:39.824273" elapsed="0.000370"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-10-06T01:29:39.824752" elapsed="0.000038"/>
</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-10-06T01:29:39.166799" elapsed="0.658099"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:39.166619" elapsed="0.658326"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:39.826094" level="INFO">${member_ip} = 10.30.171.171</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-10-06T01:29:39.825774" elapsed="0.000354"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:39.827422" 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-10-06T01:29:39.827556" 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-10-06T01:29:39.826946" elapsed="0.000645"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:39.831835" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:39.831137" elapsed="0.000806"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:39.831092" elapsed="0.000957"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:39.832841" 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-10-06T01:29:39.833144" 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-10-06T01:29:39.832382" elapsed="0.000898"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.834287" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.171.171" 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-10-06T01:29:39.833612" elapsed="0.000846"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:39.835746" level="INFO">${conn_id} = 594</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-10-06T01:29:39.834993" elapsed="0.000885"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:29:39.837469" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:29:39.837541" 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-10-06T01:29:39.837107" elapsed="0.000456"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:39.837780" elapsed="0.000320"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:29:39.839093" level="INFO">Logging into '10.30.171.171:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:29:40.460117" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-194-generic x86_64)

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

 System information as of Tue Oct  6 01:29:40 UTC 2026

  System load:  0.03               Processes:             120
  Usage of /:   14.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.171
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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

New release '24.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:26:44 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-0-builder-1 ~]&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-10-06T01:29:39.838835" elapsed="0.621399"/>
</kw>
<msg time="2026-10-06T01:29:40.460305" 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-10-06T01:29:39.838316" elapsed="0.622069"/>
</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-10-06T01:29:39.836294" elapsed="0.624294"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:29:40.461436" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-10-06T01:29:40.474553" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-10-06T01:29:40.475007" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:29:40.475230" 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-10-06T01:29:40.461002" elapsed="0.014389"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:40.475817" elapsed="0.000751"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:40.478251" 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-10-06T01:29:40.477481" elapsed="0.000985"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:40.479102" elapsed="0.000043"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:40.478709" elapsed="0.000502"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:40.478616" elapsed="0.000700"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:29:40.479864" elapsed="0.000082"/>
</return>
<status status="PASS" start="2026-10-06T01:29:40.479490" elapsed="0.000536"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:40.479438" elapsed="0.000695"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:40.480250" elapsed="0.000022"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:40.482224" elapsed="0.000553"/>
</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-10-06T01:29:40.483236" elapsed="0.000283"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:40.483866" elapsed="0.000233"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:40.481219" elapsed="0.002978"/>
</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-10-06T01:29:39.830183" elapsed="0.654283"/>
</kw>
<msg time="2026-10-06T01:29:40.484613" 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-10-06T01:29:39.829166" elapsed="0.655608"/>
</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-10-06T01:29:39.828561" elapsed="0.656345"/>
</kw>
<msg time="2026-10-06T01:29:40.484986" 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-10-06T01:29:39.827830" elapsed="0.657219"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:40.485945" elapsed="0.000405"/>
</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-10-06T01:29:40.486603" elapsed="0.000220"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:40.487038" elapsed="0.000126"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:40.485431" elapsed="0.001797"/>
</kw>
<msg time="2026-10-06T01:29:40.487342" 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-10-06T01:29:39.826400" elapsed="0.660975"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:40.488049" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:40.487662" elapsed="0.000439"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-10-06T01:29:40.488154" elapsed="0.000037"/>
</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-10-06T01:29:39.825310" elapsed="0.662985"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:39.825082" elapsed="0.663258"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:40.489470" level="INFO">${member_ip} = 10.30.170.97</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-10-06T01:29:40.489172" elapsed="0.000332"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:40.490494" 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-10-06T01:29:40.490619" 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-10-06T01:29:40.490320" elapsed="0.000332"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:40.493904" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:40.493227" elapsed="0.000791"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:40.493183" elapsed="0.000910"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:40.494812" 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-10-06T01:29:40.495084" 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-10-06T01:29:40.494405" elapsed="0.000794"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:40.496092" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.170.97" 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-10-06T01:29:40.495505" elapsed="0.000737"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:40.497442" level="INFO">${conn_id} = 597</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-10-06T01:29:40.496535" elapsed="0.001027"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:29:40.499076" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:29:40.499147" 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-10-06T01:29:40.498803" elapsed="0.000366"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:40.499374" elapsed="0.000290"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:29:40.500627" level="INFO">Logging into '10.30.170.97:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:29:41.115628" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-194-generic x86_64)

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

 System information as of Tue Oct  6 01:29:40 UTC 2026

  System load:  0.32               Processes:             119
  Usage of /:   14.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.97
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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

New release '24.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:26:45 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-0-builder-2 ~]&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-10-06T01:29:40.500314" elapsed="0.615423"/>
</kw>
<msg time="2026-10-06T01:29:41.115796" 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-10-06T01:29:40.499933" elapsed="0.615925"/>
</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-10-06T01:29:40.498111" elapsed="0.617964"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:29:41.116888" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-10-06T01:29:41.129935" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-10-06T01:29:41.130388" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:29:41.130641" 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-10-06T01:29:41.116429" elapsed="0.014438"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:41.131311" elapsed="0.000852"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:41.133928" 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-10-06T01:29:41.133143" elapsed="0.001048"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:41.134849" elapsed="0.000045"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:41.134422" elapsed="0.000574"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:41.134353" elapsed="0.000765"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:29:41.135745" elapsed="0.000096"/>
</return>
<status status="PASS" start="2026-10-06T01:29:41.135316" elapsed="0.000594"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:41.135258" elapsed="0.000804"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:41.136200" elapsed="0.000021"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:41.138219" elapsed="0.000526"/>
</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-10-06T01:29:41.139168" elapsed="0.000293"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:41.139841" elapsed="0.000249"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:41.137137" elapsed="0.003059"/>
</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-10-06T01:29:40.492380" elapsed="0.648125"/>
</kw>
<msg time="2026-10-06T01:29:41.140660" 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-10-06T01:29:40.491754" elapsed="0.649036"/>
</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-10-06T01:29:40.491342" elapsed="0.649550"/>
</kw>
<msg time="2026-10-06T01:29:41.140971" 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-10-06T01:29:40.490872" elapsed="0.650257"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:41.142313" elapsed="0.000417"/>
</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-10-06T01:29:41.143001" elapsed="0.000192"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:41.143387" elapsed="0.000124"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:41.141512" elapsed="0.002066"/>
</kw>
<msg time="2026-10-06T01:29:41.143733" 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-10-06T01:29:40.489799" elapsed="0.653969"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:41.144389" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:41.144074" elapsed="0.000370"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-10-06T01:29:41.144497" elapsed="0.000038"/>
</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-10-06T01:29:40.488710" elapsed="0.655929"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:40.488462" elapsed="0.656404"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:39.166518" elapsed="1.978395"/>
</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-10-06T01:29:39.164775" elapsed="1.980238"/>
</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-10-06T01:29:41.145225" elapsed="0.000288"/>
</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-10-06T01:29:41.153264" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:41.153142" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:41.153116" elapsed="0.000238"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:41.153834" 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-10-06T01:29:41.153984" 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-10-06T01:29:41.153626" elapsed="0.000398"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:41.154611" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:41.154285" elapsed="0.000384"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:41.155279" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:41.154969" elapsed="0.000366"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:41.156324" 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-10-06T01:29:41.156077" elapsed="0.000388">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-10-06T01:29:41.156599" level="INFO">${status} = FAIL</msg>
<msg time="2026-10-06T01:29:41.156657" 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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:41.155550" elapsed="0.001158"/>
</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-10-06T01:29:41.157151" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:41.156805" elapsed="0.000442"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:41.156781" elapsed="0.000499"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:41.158267" level="INFO">${ip_address} = 10.30.171.109</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-10-06T01:29:41.157901" elapsed="0.000397"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-10-06T01:29:41.158348" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:29:41.158470" level="INFO">${odl_ip} = 10.30.171.109</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:41.157531" elapsed="0.000962"/>
</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-10-06T01:29:41.158664" elapsed="0.000352"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:41.159358" level="INFO">index=600
host=10.30.171.109
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-10-06T01:29:41.159491" level="INFO">${karaf_connection_object} = index=600
host=10.30.171.109
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_er...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-10-06T01:29:41.159222" elapsed="0.000295"/>
</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-10-06T01:29:41.159691" elapsed="0.000236"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-10-06T01:29:41.160323" level="INFO">Logging into '10.30.171.109:8101' as 'karaf'.</msg>
<msg time="2026-10-06T01:29:41.428574" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</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="PASS" start="2026-10-06T01:29:41.160125" elapsed="0.268542"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:41.430159" elapsed="0.000315"/>
</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-10-06T01:29:41.430659" elapsed="0.000168"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:41.430983" 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-10-06T01:29:41.429772" elapsed="0.001352"/>
</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-10-06T01:29:41.428996" elapsed="0.002171"/>
</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="PASS" start="2026-10-06T01:29:41.152720" elapsed="0.278495"/>
</kw>
<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="PASS" start="2026-10-06T01:29:41.146502" elapsed="0.284756"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:41.145980" elapsed="0.285326"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:41.145769" elapsed="0.285574"/>
</iter>
<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-10-06T01:29:41.436412" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:41.436322" elapsed="0.000135"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:41.436302" elapsed="0.000177"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:41.436813" 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-10-06T01:29:41.436907" 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-10-06T01:29:41.436690" elapsed="0.000242"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:41.437368" level="INFO">{1: 600}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:41.437133" elapsed="0.000275"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:41.437829" level="INFO">2</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:41.437592" elapsed="0.000276"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:41.438552" level="FAIL">Dictionary does not contain key '2'.</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-10-06T01:29:41.438381" elapsed="0.000262">Dictionary does not contain key '2'.</status>
</kw>
<msg time="2026-10-06T01:29:41.438755" level="INFO">${status} = FAIL</msg>
<msg time="2026-10-06T01:29:41.438797" level="INFO">${old_connection_index} = Dictionary does not contain key '2'.</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:41.438035" elapsed="0.000783"/>
</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-10-06T01:29:41.439110" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:41.438887" elapsed="0.000331"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:41.438870" elapsed="0.000372"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:41.439898" level="INFO">${ip_address} = 10.30.171.171</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-10-06T01:29:41.439669" elapsed="0.000254"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-10-06T01:29:41.439981" elapsed="0.000030"/>
</return>
<msg time="2026-10-06T01:29:41.440110" level="INFO">${odl_ip} = 10.30.171.171</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:41.439424" elapsed="0.000710"/>
</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-10-06T01:29:41.440307" elapsed="0.000313"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:41.441006" level="INFO">index=602
host=10.30.171.171
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-10-06T01:29:41.441098" level="INFO">${karaf_connection_object} = index=602
host=10.30.171.171
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_er...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-10-06T01:29:41.440846" elapsed="0.000277"/>
</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-10-06T01:29:41.441280" elapsed="0.000228"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-10-06T01:29:41.441908" level="INFO">Logging into '10.30.171.171:8101' as 'karaf'.</msg>
<msg time="2026-10-06T01:29:41.729083" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</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="PASS" start="2026-10-06T01:29:41.441709" elapsed="0.287488"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:41.730392" 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-10-06T01:29:41.730922" elapsed="0.000159"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:41.731221" 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-10-06T01:29:41.730053" elapsed="0.001307"/>
</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-10-06T01:29:41.729498" elapsed="0.001902"/>
</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="PASS" start="2026-10-06T01:29:41.436079" elapsed="0.295367"/>
</kw>
<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="PASS" start="2026-10-06T01:29:41.431987" elapsed="0.299507"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:41.431567" elapsed="0.299974"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:41.431429" elapsed="0.300146"/>
</iter>
<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-10-06T01:29:41.736707" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:41.736605" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:41.736583" elapsed="0.000193"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:41.737109" 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-10-06T01:29:41.737280" 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-10-06T01:29:41.736987" elapsed="0.000320"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:41.737821" level="INFO">{1: 600, 2: 602}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:41.737561" elapsed="0.000302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:41.738285" level="INFO">3</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:41.738065" elapsed="0.000260"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:41.739029" level="FAIL">Dictionary does not contain key '3'.</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-10-06T01:29:41.738843" elapsed="0.000287">Dictionary does not contain key '3'.</status>
</kw>
<msg time="2026-10-06T01:29:41.739227" level="INFO">${status} = FAIL</msg>
<msg time="2026-10-06T01:29:41.739267" level="INFO">${old_connection_index} = Dictionary does not contain key '3'.</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:41.738479" elapsed="0.000809"/>
</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-10-06T01:29:41.739569" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:41.739357" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:41.739340" elapsed="0.000319"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:41.740320" level="INFO">${ip_address} = 10.30.170.97</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-10-06T01:29:41.740113" elapsed="0.000232"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-10-06T01:29:41.740388" elapsed="0.000029"/>
</return>
<msg time="2026-10-06T01:29:41.740513" level="INFO">${odl_ip} = 10.30.170.97</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:41.739856" elapsed="0.000680"/>
</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-10-06T01:29:41.740722" elapsed="0.000329"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:41.741394" level="INFO">index=604
host=10.30.170.97
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-10-06T01:29:41.741483" level="INFO">${karaf_connection_object} = index=604
host=10.30.170.97
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_err...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-10-06T01:29:41.741265" 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-10-06T01:29:41.741662" elapsed="0.000246"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-10-06T01:29:41.742339" level="INFO">Logging into '10.30.170.97:8101' as 'karaf'.</msg>
<msg time="2026-10-06T01:29:41.979619" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</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="PASS" start="2026-10-06T01:29:41.742144" elapsed="0.237582"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:41.980870" elapsed="0.000316"/>
</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-10-06T01:29:41.981368" elapsed="0.000140"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:41.981646" elapsed="0.000114"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:41.980519" elapsed="0.001288"/>
</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-10-06T01:29:41.980025" elapsed="0.001823"/>
</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="PASS" start="2026-10-06T01:29:41.736364" elapsed="0.245530"/>
</kw>
<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="PASS" start="2026-10-06T01:29:41.732211" elapsed="0.249743"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:41.731829" elapsed="0.250212"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:41.731663" elapsed="0.250415"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="PASS" start="2026-10-06T01:29:41.145584" elapsed="0.836524"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-10-06T01:29:39.142742" elapsed="2.839424"/>
</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-10-06T01:29:41.983036" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:41.982947" elapsed="0.000134"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:41.982915" elapsed="0.000187"/>
</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-10-06T01:29:41.984987" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:41.984889" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:41.984872" elapsed="0.000178"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:41.985905" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:41.985560" elapsed="0.000370"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:41.986364" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:41.986095" elapsed="0.000294"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:41.986429" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:29:41.986555" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:41.985257" elapsed="0.001321"/>
</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-10-06T01:29:41.989008" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:41.988905" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:41.988888" elapsed="0.000183"/>
</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-10-06T01:29:41.990135" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:41.990028" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:41.990011" elapsed="0.000254"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:41.990799" level="INFO">${karaf_connection_index} = 600</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-10-06T01:29:41.990423" elapsed="0.000415"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:41.991321" 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-10-06T01:29:41.991094" elapsed="0.000266"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:42.026367" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "r "k "s "p "a "c "e "/ "o "v "s "[78Cd "[A[78Cb</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:41.993111" elapsed="0.033422"/>
</kw>
<msg time="2026-10-06T01:29:42.026697" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:42.026770" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:41.991582" elapsed="0.035238"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:42.097772" level="INFO">"- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "o "v "s "d "b "/ "S "o "u "t "h "b "o "u "n "[78Cd "[A[78C_
 "C "l "u "s "t "e "r "/ "0 "2 "0 "_ "_ "S "o "u "t "h "b "o "u "n "d "_ "C "l "u "s "t "e "r "_ "E "x "t "e "n "s "i "o "n ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:42.028489" elapsed="0.069477"/>
</kw>
<msg time="2026-10-06T01:29:42.098113" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:42.098180" level="INFO">${message_wait} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.027094" elapsed="0.071135"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.098641" elapsed="0.000063"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:42.098386" elapsed="0.000413"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.098366" elapsed="0.000458"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:42.099539" level="INFO"> "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "o "v "s "d "b "/ "S "o "u "t "h "b "o "u "n "[78Cd "[A[78C_
 "C "l "u "s "t "e "r "/ "0 "2 "0 "_ "_ "S "o "u "t "h "b "o "u "n "d "_ "C "l "u "s "t "e "r "_ "E "x "t "e "n "s "i "o "n ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:42.099055" elapsed="0.000611"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.100072" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:42.099811" elapsed="0.000397"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.099792" elapsed="0.000441"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:42.100264" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:42.102241" elapsed="0.000274"/>
</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-10-06T01:29:42.102818" elapsed="0.000159"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:42.103161" elapsed="0.000091"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:42.101564" elapsed="0.001788"/>
</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-10-06T01:29:42.100530" elapsed="0.002935"/>
</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="PASS" start="2026-10-06T01:29:41.989808" elapsed="0.113733"/>
</kw>
<msg time="2026-10-06T01:29:42.103623" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:42.103663" level="INFO">${message} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:41.989219" elapsed="0.114563"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:42.103958" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:42.103858" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.103841" elapsed="0.000196"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:29:42.104392" elapsed="0.000024"/>
</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-10-06T01:29:42.104781" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:42.104848" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:29:41.988636" elapsed="0.116296"/>
</kw>
<msg time="2026-10-06T01:29:42.105057" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:42.105098" level="INFO">${output} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:41.986959" elapsed="0.118174"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.105417" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:42.105200" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.105184" elapsed="0.000305"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:41.986805" elapsed="0.118705"/>
</iter>
<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-10-06T01:29:42.107827" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:42.107742" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.107724" elapsed="0.000164"/>
</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-10-06T01:29:42.108973" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:42.108850" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.108834" elapsed="0.000272"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:42.109603" level="INFO">${karaf_connection_index} = 602</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-10-06T01:29:42.109249" elapsed="0.000393"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:42.110129" 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-10-06T01:29:42.109900" elapsed="0.000266"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:42.146056" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "r "k "s "p "a "c "e "/ "o "v "s "[78Cd "[A[78Cb</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:42.111757" elapsed="0.034447"/>
</kw>
<msg time="2026-10-06T01:29:42.146364" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:42.146432" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.110423" elapsed="0.036058"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:42.210747" level="INFO">"- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "o "v "s "d "b "/ "S "o "u "t "h "b "o "u "n "[78Cd "[A[78C_
 "C "l "u "s "t "e "r "/ "0 "2 "0 "_ "_ "S "o "u "t "h "b "o "u "n "d "_ "C "l "u "s "t "e "r "_ "E "x "t "e "n "s "i "o "n ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:42.148096" elapsed="0.062864"/>
</kw>
<msg time="2026-10-06T01:29:42.211118" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:42.211186" level="INFO">${message_wait} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.146762" elapsed="0.064475"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.211738" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:42.211422" elapsed="0.000464"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.211387" elapsed="0.000533"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:42.212968" level="INFO"> "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "o "v "s "d "b "/ "S "o "u "t "h "b "o "u "n "[78Cd "[A[78C_
 "C "l "u "s "t "e "r "/ "0 "2 "0 "_ "_ "S "o "u "t "h "b "o "u "n "d "_ "C "l "u "s "t "e "r "_ "E "x "t "e "n "s "i "o "n ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:42.212128" elapsed="0.000970"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.213500" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:42.213254" elapsed="0.000382"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.213234" elapsed="0.000427"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:42.213714" elapsed="0.000038"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:42.215875" 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-10-06T01:29:42.216399" elapsed="0.000156"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:42.216818" elapsed="0.000099"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:42.215163" elapsed="0.001873"/>
</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-10-06T01:29:42.214056" elapsed="0.003077"/>
</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="PASS" start="2026-10-06T01:29:42.108613" elapsed="0.108596"/>
</kw>
<msg time="2026-10-06T01:29:42.217292" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:42.217332" level="INFO">${message} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.108054" elapsed="0.109313"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:42.217520" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:42.217436" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.217419" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.218041" elapsed="0.000026"/>
</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-10-06T01:29:42.218390" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:42.218456" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:29:42.107484" elapsed="0.111107"/>
</kw>
<msg time="2026-10-06T01:29:42.218700" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:42.218742" level="INFO">${output} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.105781" elapsed="0.112997"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.219083" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:42.218849" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.218833" elapsed="0.000321"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:42.105617" elapsed="0.113559"/>
</iter>
<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-10-06T01:29:42.221552" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:42.221466" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.221449" elapsed="0.000165"/>
</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-10-06T01:29:42.222711" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:42.222576" elapsed="0.000243"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.222559" elapsed="0.000284"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:42.223368" level="INFO">${karaf_connection_index} = 604</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-10-06T01:29:42.223005" elapsed="0.000401"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:42.223881" 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-10-06T01:29:42.223643" elapsed="0.000277"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:42.259357" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "r "k "s "p "a "c "e "/ "o "v "s "[78Cd "[A[78Cb</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:42.225450" elapsed="0.034054"/>
</kw>
<msg time="2026-10-06T01:29:42.259652" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:42.259743" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.224156" elapsed="0.035639"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:42.332926" level="INFO">"- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "o "v "s "d "b "/ "S "o "u "t "h "b "o "u "n "[78Cd "[A[78C_
 "C "l "u "s "t "e "r "/ "0 "2 "0 "_ "_ "S "o "u "t "h "b "o "u "n "d "_ "C "l "u "s "t "e "r "_ "E "x "t "e "n "s "i "o "n ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:42.261391" elapsed="0.071736"/>
</kw>
<msg time="2026-10-06T01:29:42.333278" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:42.333347" level="INFO">${message_wait} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.260065" elapsed="0.073331"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.333852" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:42.333553" elapsed="0.000457"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.333532" elapsed="0.000504"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:42.334721" level="INFO"> "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "o "v "s "d "b "/ "S "o "u "t "h "b "o "u "n "[78Cd "[A[78C_
 "C "l "u "s "t "e "r "/ "0 "2 "0 "_ "_ "S "o "u "t "h "b "o "u "n "d "_ "C "l "u "s "t "e "r "_ "E "x "t "e "n "s "i "o "n ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:42.334222" elapsed="0.000630"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.335235" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:42.334991" elapsed="0.000379"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.334972" elapsed="0.000422"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:42.335425" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:42.339766" elapsed="0.000300"/>
</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-10-06T01:29:42.340327" elapsed="0.000141"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:42.340650" elapsed="0.000110"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:42.336755" elapsed="0.004109"/>
</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-10-06T01:29:42.335708" elapsed="0.005272"/>
</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="PASS" start="2026-10-06T01:29:42.222372" elapsed="0.118683"/>
</kw>
<msg time="2026-10-06T01:29:42.341138" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:42.341177" level="INFO">${message} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.221787" elapsed="0.119425"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:42.341369" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:42.341282" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.341265" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.341818" elapsed="0.000024"/>
</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-10-06T01:29:42.342183" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:42.342249" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:29:42.221219" elapsed="0.121114"/>
</kw>
<msg time="2026-10-06T01:29:42.342416" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:42.342456" level="INFO">${output} =  "- "c "s "i "t "- "3 "n "o "d "e "- "u "p "s "t "r "e "a "m "- "c "l "u "s "t "e "r "i "n "g "- "o "n "l "y "- "c "h "r ...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.219441" elapsed="0.123049"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.342791" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:42.342558" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.342543" elapsed="0.000321"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:42.219300" elapsed="0.123584"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:41.986631" elapsed="0.356280"/>
</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-10-06T01:29:41.984648" elapsed="0.358333"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-10-06T01:29:41.982758" elapsed="0.360272"/>
</kw>
<arg>KarafKeywords.Log_Test_Suite_Start_To_Controller_Karaf</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:41.982321" elapsed="0.360748"/>
</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-10-06T01:29:39.140348" elapsed="3.202768"/>
</kw>
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-10-06T01:29:42.343994" level="INFO">${already_done} = True</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-10-06T01:29:42.343633" elapsed="0.000386"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="PASS" start="2026-10-06T01:29:42.344158" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:42.344085" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.344068" elapsed="0.000163"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.344405" elapsed="0.000019"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<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="NOT RUN" start="2026-10-06T01:29:42.344574" elapsed="0.000018"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<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 errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.344767" elapsed="0.000020"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<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="NOT RUN" start="2026-10-06T01:29:42.344968" elapsed="0.000019"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<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="NOT RUN" start="2026-10-06T01:29:42.345205" elapsed="0.000022"/>
</kw>
<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-10-06T01:29:42.343361" elapsed="0.001957"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:39.140096" elapsed="3.205271"/>
</kw>
<test id="s1-s2-s2-t1" name="Check Shards Status Before Fail" line="17">
<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-10-06T01:29:42.346721" elapsed="0.000200"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:29:42.346454" elapsed="0.000532"/>
</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-10-06T01:29:42.347906" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:42.347820" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.347803" elapsed="0.000204"/>
</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-10-06T01:29:42.350151" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:42.350067" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.350050" elapsed="0.000164"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:42.351186" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:42.350797" elapsed="0.000414"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:42.351635" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:42.351362" elapsed="0.000297"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:42.351718" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:29:42.351846" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:42.350418" 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-10-06T01:29:42.354282" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:42.354197" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.354178" elapsed="0.000167"/>
</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-10-06T01:29:42.355440" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:42.355356" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.355339" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:42.355893" level="INFO">${karaf_connection_index} = 600</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-10-06T01:29:42.355644" elapsed="0.000274"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:42.356282" 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-10-06T01:29:42.356101" elapsed="0.000205"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:42.389169" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:42.356889" elapsed="0.032480"/>
</kw>
<msg time="2026-10-06T01:29:42.389532" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:42.389575" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.356461" elapsed="0.033149"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:42.455632" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CB
 "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:42.390275" elapsed="0.065554"/>
</kw>
<msg time="2026-10-06T01:29:42.456003" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:42.456045" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.389805" elapsed="0.066273"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.456352" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:42.456148" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.456130" elapsed="0.000316"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:42.456996" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CB
 "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:42.456628" elapsed="0.000482"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.457373" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:42.457173" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.457156" elapsed="0.000313"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:42.457499" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:42.460031" elapsed="0.000475"/>
</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-10-06T01:29:42.461777" elapsed="0.000623"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:42.463818" elapsed="0.000331"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:42.458329" elapsed="0.005887"/>
</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-10-06T01:29:42.457791" elapsed="0.006603"/>
</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="PASS" start="2026-10-06T01:29:42.355098" elapsed="0.109388"/>
</kw>
<msg time="2026-10-06T01:29:42.464571" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:42.464610" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.354493" elapsed="0.110153"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:42.464881" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:42.464794" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.464775" elapsed="0.000200"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:29:42.465289" elapsed="0.000023"/>
</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-10-06T01:29:42.465586" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:42.465651" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:29:42.353887" elapsed="0.111868"/>
</kw>
<msg time="2026-10-06T01:29:42.465839" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:42.465878" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.352222" elapsed="0.113692"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.466217" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:42.465997" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.465981" elapsed="0.000308"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:42.352083" elapsed="0.114227"/>
</iter>
<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-10-06T01:29:42.468882" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:42.468795" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.468777" elapsed="0.000204"/>
</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-10-06T01:29:42.470124" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:42.470038" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.470021" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:42.470562" level="INFO">${karaf_connection_index} = 602</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-10-06T01:29:42.470330" elapsed="0.000257"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:42.470963" 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-10-06T01:29:42.470766" elapsed="0.000222"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:42.505596" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:42.471635" elapsed="0.034174"/>
</kw>
<msg time="2026-10-06T01:29:42.505983" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:42.506025" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.471140" elapsed="0.034920"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:42.570039" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CB
 "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:42.506654" elapsed="0.063557"/>
</kw>
<msg time="2026-10-06T01:29:42.570367" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:42.570409" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.506223" elapsed="0.064222"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.570743" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:42.570515" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.570497" elapsed="0.000342"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:42.571465" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CB
 "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:42.571045" elapsed="0.000501"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.571826" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:42.571609" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.571592" elapsed="0.000327"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:42.571964" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:42.574453" elapsed="0.000519"/>
</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-10-06T01:29:42.576206" elapsed="0.000553"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:42.578209" elapsed="0.000448"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:42.572776" elapsed="0.005972"/>
</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-10-06T01:29:42.572256" elapsed="0.006610"/>
</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="PASS" start="2026-10-06T01:29:42.469735" elapsed="0.109241"/>
</kw>
<msg time="2026-10-06T01:29:42.579062" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:42.579102" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.469132" elapsed="0.110006"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:42.579295" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:29:42.579209" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.579192" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.579779" elapsed="0.000026"/>
</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-10-06T01:29:42.580099" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:42.580164" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:29:42.468463" elapsed="0.111786"/>
</kw>
<msg time="2026-10-06T01:29:42.580332" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:42.580372" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.466554" elapsed="0.113928"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.580794" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:42.580556" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.580539" elapsed="0.000329"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:42.466417" elapsed="0.114471"/>
</iter>
<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-10-06T01:29:42.583286" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:42.583201" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.583183" elapsed="0.000166"/>
</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-10-06T01:29:42.584452" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:42.584367" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.584350" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:42.584903" level="INFO">${karaf_connection_index} = 604</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-10-06T01:29:42.584655" elapsed="0.000272"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:42.585282" 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-10-06T01:29:42.585104" elapsed="0.000202"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:42.619957" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:42.585987" elapsed="0.034151"/>
</kw>
<msg time="2026-10-06T01:29:42.620317" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:42.620359" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.585459" elapsed="0.034935"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:42.687269" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CB
 "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:42.621031" elapsed="0.066422"/>
</kw>
<msg time="2026-10-06T01:29:42.687616" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:42.687658" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.620560" elapsed="0.067163"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.688029" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:42.687798" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.687779" elapsed="0.000346"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:42.688654" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CB
 "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:42.688309" elapsed="0.000447"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.689038" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:42.688819" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.688802" elapsed="0.000331"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:42.689163" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:42.691637" elapsed="0.000513"/>
</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-10-06T01:29:42.693386" elapsed="0.000479"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:42.695070" elapsed="0.000455"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:42.689981" elapsed="0.005612"/>
</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-10-06T01:29:42.689426" elapsed="0.006338"/>
</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="PASS" start="2026-10-06T01:29:42.584109" elapsed="0.111734"/>
</kw>
<msg time="2026-10-06T01:29:42.695925" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:42.695981" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.583495" elapsed="0.112522"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:42.696174" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:42.696087" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.696070" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.696562" elapsed="0.000024"/>
</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-10-06T01:29:42.696875" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:42.696957" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:29:42.582895" elapsed="0.114148"/>
</kw>
<msg time="2026-10-06T01:29:42.697126" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:42.697166" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.581151" elapsed="0.116050"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.697486" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:42.697268" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.697252" elapsed="0.000305"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:42.581013" elapsed="0.116564"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:42.351921" elapsed="0.345682"/>
</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-10-06T01:29:42.349751" elapsed="0.347900"/>
</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-10-06T01:29:42.347516" elapsed="0.350217"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.347130" elapsed="0.350646"/>
</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-10-06T01:29:42.346107" elapsed="0.351717"/>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:29:42.705712" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:29:42.705464" elapsed="0.000288">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:42.705073" elapsed="0.000800">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:29:42.705922" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:29:42.702210" elapsed="0.003770"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:29:42.701510" elapsed="0.004555">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.706285" elapsed="0.000020"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.706505" elapsed="0.000022"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.706734" elapsed="0.000022"/>
</kw>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:29:42.698037" elapsed="0.008836">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:29:42.345446" elapsed="0.361575">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</test>
<test id="s1-s2-s2-t2" name="Start OVS Multiple Connections" line="21">
<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-10-06T01:29:42.708387" elapsed="0.000202"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:29:42.708141" elapsed="0.000497"/>
</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-10-06T01:29:42.709758" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:42.709457" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.709440" elapsed="0.000385"/>
</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-10-06T01:29:42.711718" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:42.711619" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.711602" elapsed="0.000179"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:42.712713" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:42.712373" elapsed="0.000367"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:42.713179" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:42.712890" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:42.713244" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:29:42.713370" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:29:42.712019" elapsed="0.001374"/>
</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-10-06T01:29:42.715834" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:42.715747" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.715729" elapsed="0.000168"/>
</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-10-06T01:29:42.717022" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:42.716921" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.716904" elapsed="0.000181"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:42.717455" level="INFO">${karaf_connection_index} = 600</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-10-06T01:29:42.717228" elapsed="0.000252"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:42.717838" 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-10-06T01:29:42.717640" elapsed="0.000222"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:42.750370" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:42.718437" elapsed="0.032108"/>
</kw>
<msg time="2026-10-06T01:29:42.750745" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:42.750796" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.718029" elapsed="0.032803"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:42.813878" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "S "t "a "r "t "[C "O "V "S "[C "M "u "l "t "i "p "l "e "[C "[78CC "[A[78Co
 "n "n "e "c "t "i "o "n "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:42.751430" elapsed="0.063200"/>
</kw>
<msg time="2026-10-06T01:29:42.815258" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:42.815357" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.751010" elapsed="0.064428"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.816628" elapsed="0.000089"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:42.815761" elapsed="0.001257"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.815630" elapsed="0.001461"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:42.818638" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "S "t "a "r "t "[C "O "V "S "[C "M "u "l "t "i "p "l "e "[C "[78CC "[A[78Co
 "n "n "e "c "t "i "o "n "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:42.817516" elapsed="0.001352"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.819517" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:42.819036" elapsed="0.000698"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.818995" elapsed="0.000798"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:42.819877" elapsed="0.000151"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:42.826179" elapsed="0.001726"/>
</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-10-06T01:29:42.830844" elapsed="0.001179"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:42.835015" elapsed="0.000756"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:42.822109" elapsed="0.013843"/>
</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-10-06T01:29:42.820770" elapsed="0.015453"/>
</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="PASS" start="2026-10-06T01:29:42.716637" elapsed="0.119762"/>
</kw>
<msg time="2026-10-06T01:29:42.836590" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:42.836919" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.716063" elapsed="0.120973"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:42.837396" elapsed="0.000059"/>
</return>
<status status="PASS" start="2026-10-06T01:29:42.837200" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.837159" elapsed="0.000418"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:29:42.838410" elapsed="0.000054"/>
</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-10-06T01:29:42.839163" elapsed="0.000051"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:42.839307" elapsed="0.000032"/>
</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="PASS" start="2026-10-06T01:29:42.715437" elapsed="0.124064"/>
</kw>
<msg time="2026-10-06T01:29:42.839750" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:42.839848" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.713736" elapsed="0.126215"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.840605" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:42.840113" elapsed="0.000938"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.840076" elapsed="0.001032"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:42.713578" elapsed="0.127579"/>
</iter>
<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-10-06T01:29:42.845137" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:42.845011" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.844985" elapsed="0.000241"/>
</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-10-06T01:29:42.846807" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:42.846649" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.846625" elapsed="0.000273"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:42.847452" level="INFO">${karaf_connection_index} = 602</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-10-06T01:29:42.847118" elapsed="0.000369"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:42.848091" 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-10-06T01:29:42.847735" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:42.884778" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:42.848964" elapsed="0.036088"/>
</kw>
<msg time="2026-10-06T01:29:42.885277" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:42.885336" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.848343" elapsed="0.037044"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:42.953667" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "S "t "a "r "t "[C "O "V "S "[C "M "u "l "t "i "p "l "e "[C "[78CC "[A[78Co
 "n "n "e "c "t "i "o "n "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:42.886307" elapsed="0.067575"/>
</kw>
<msg time="2026-10-06T01:29:42.954068" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:42.954112" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.885619" elapsed="0.068530"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.954457" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:42.954230" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.954208" elapsed="0.000357"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:42.955184" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "S "t "a "r "t "[C "O "V "S "[C "M "u "l "t "i "p "l "e "[C "[78CC "[A[78Co
 "n "n "e "c "t "i "o "n "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:42.954796" elapsed="0.000472"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.955536" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:42.955333" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.955316" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:42.955695" elapsed="0.000036"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:42.958329" elapsed="0.000535"/>
</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-10-06T01:29:42.960115" elapsed="0.000680"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:42.962205" elapsed="0.000313"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:42.956575" elapsed="0.006011"/>
</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-10-06T01:29:42.956035" elapsed="0.006686"/>
</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="PASS" start="2026-10-06T01:29:42.846281" elapsed="0.116543"/>
</kw>
<msg time="2026-10-06T01:29:42.962951" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:42.962995" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.845432" elapsed="0.117601"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:42.963195" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:29:42.963108" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.963090" elapsed="0.000186"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.963620" elapsed="0.000026"/>
</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-10-06T01:29:42.964041" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:42.964108" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:29:42.844530" elapsed="0.119664"/>
</kw>
<msg time="2026-10-06T01:29:42.964336" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:42.964376" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.841796" elapsed="0.122616"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:42.964738" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:42.964482" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.964466" elapsed="0.000346"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:42.841438" elapsed="0.123396"/>
</iter>
<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-10-06T01:29:42.967463" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:42.967373" elapsed="0.000133"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.967356" elapsed="0.000171"/>
</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-10-06T01:29:42.968735" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:42.968614" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:42.968596" elapsed="0.000202"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:29:42.969208" level="INFO">${karaf_connection_index} = 604</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-10-06T01:29:42.968970" elapsed="0.000263"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:42.969591" 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-10-06T01:29:42.969395" elapsed="0.000222"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:29:43.001469" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:29:42.970273" elapsed="0.031388"/>
</kw>
<msg time="2026-10-06T01:29:43.001868" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:29:43.001911" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.969794" elapsed="0.032166"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:29:43.058317" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "S "t "a "r "t "[C "O "V "S "[C "M "u "l "t "i "p "l "e "[C "[78CC "[A[78Co
 "n "n "e "c "t "i "o "n "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:29:43.002556" elapsed="0.055945"/>
</kw>
<msg time="2026-10-06T01:29:43.058701" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:29:43.058761" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:43.002128" elapsed="0.056681"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:43.059166" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:43.058899" elapsed="0.000342"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:43.058876" elapsed="0.000390"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:43.059940" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "S "t "a "r "t "[C "O "V "S "[C "M "u "l "t "i "p "l "e "[C "[78CC "[A[78Co
 "n "n "e "c "t "i "o "n "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:43.059450" elapsed="0.000582"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:43.060323" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:43.060097" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:43.060080" elapsed="0.000360"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:29:43.060479" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:43.063075" elapsed="0.000492"/>
</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-10-06T01:29:43.064805" elapsed="0.000474"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:43.066535" elapsed="0.000769"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:43.061339" elapsed="0.006037"/>
</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-10-06T01:29:43.060817" elapsed="0.006676"/>
</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="PASS" start="2026-10-06T01:29:42.968318" elapsed="0.099256"/>
</kw>
<msg time="2026-10-06T01:29:43.067657" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:43.067719" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.967707" elapsed="0.100051"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:29:43.067919" elapsed="0.000044"/>
</return>
<status status="PASS" start="2026-10-06T01:29:43.067832" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:43.067814" elapsed="0.000205"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:43.068336" elapsed="0.000024"/>
</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-10-06T01:29:43.068653" elapsed="0.000072"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:29:43.068771" 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="PASS" start="2026-10-06T01:29:42.967071" elapsed="0.101787"/>
</kw>
<msg time="2026-10-06T01:29:43.068956" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:29:43.068997" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.965112" elapsed="0.103920"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:43.069330" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:43.069101" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:43.069085" elapsed="0.000319"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:42.964970" elapsed="0.104455"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:42.713440" elapsed="0.356016"/>
</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-10-06T01:29:42.711324" elapsed="0.358197"/>
</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-10-06T01:29:42.709204" elapsed="0.360396"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:29:42.708801" elapsed="0.360855"/>
</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-10-06T01:29:42.707783" elapsed="0.361985"/>
</kw>
<kw name="Add Multiple Managers to OVS" owner="OVSDB">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:29:43.072615" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:29:43.072261" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:29:43.073108" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:29:43.072815" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:29:43.073173" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:29:43.073299" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${controller_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-10-06T01:29:43.071880" elapsed="0.001442"/>
</kw>
<kw name="Clean Mininet System" owner="Utils">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:43.075543" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:43.075295" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:43.075274" elapsed="0.000358"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:43.076015" 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-10-06T01:29:43.076352" 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-10-06T01:29:43.075845" elapsed="0.000533"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:43.076880" level="INFO">Attempting to execute command "sudo mn -c" on remote system "10.30.170.234" 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-10-06T01:29:43.076567" elapsed="0.000369"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:43.077436" level="INFO">${conn_id} = 615</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-10-06T01:29:43.077114" elapsed="0.000348"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:29:43.078397" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:29:43.078467" 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-10-06T01:29:43.078087" elapsed="0.000402"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:43.078636" elapsed="0.000547"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:29:43.079993" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:29:43.505032" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:29:15 UTC 2026

  System load:  0.0                Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:29:38 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:29:43.079735" elapsed="0.425572"/>
</kw>
<msg time="2026-10-06T01:29:43.505433" 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-10-06T01:29:43.079349" elapsed="0.426214"/>
</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-10-06T01:29:43.077662" elapsed="0.428086"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:29:43.506545" level="INFO">Executing command 'sudo mn -c'.</msg>
<msg time="2026-10-06T01:29:44.693202" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:29:44.693795" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:29:44.693897" level="INFO">${stderr} = *** Removing excess controllers/ofprotocols/ofdatapaths/pings/noxes
killall controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec iv...</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-10-06T01:29:43.506170" elapsed="1.187813"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:44.694618" elapsed="0.000686"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:44.696795" level="INFO">*** Removing excess controllers/ofprotocols/ofdatapaths/pings/noxes
killall controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec ivs ryu-manager 2&gt; /dev/null
killall -9 controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec ivs ryu-manager 2&gt; /dev/null
pkill -9 -f "sudo mnexec"
*** Removing junk from /tmp
rm -f /tmp/vconn* /tmp/vlogs* /tmp/*.out /tmp/*.log
*** Removing old X11 tunnels
*** Removing excess kernel datapaths
ps ax | egrep -o 'dp[0-9]+' | sed 's/dp/nl:/'
***  Removing OVS datapaths
ovs-vsctl --timeout=1 list-br
ovs-vsctl --timeout=1 list-br
*** Removing all links of the pattern foo-ethX
ip link show | egrep -o '([-_.[:alnum:]]+-eth[[:digit:]]+)'
ip link show
*** Killing stale mininet node processes
pkill -9 -f mininet:
*** Shutting down stale tunnels
pkill -9 -f Tunnel=Ethernet
pkill -9 -f .ssh/mn
rm -f ~/.ssh/mn/*
*** Cleanup complete.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:44.695972" elapsed="0.000972"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:44.697471" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:44.697155" elapsed="0.000456"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:44.697086" elapsed="0.000585"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:29:44.698058" elapsed="0.000086"/>
</return>
<status status="PASS" start="2026-10-06T01:29:44.697828" elapsed="0.000388"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:44.697794" elapsed="0.000473"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:44.698339" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:44.700283" elapsed="0.000781"/>
</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-10-06T01:29:44.701636" elapsed="0.000422"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:44.702408" elapsed="0.000233"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:44.699181" elapsed="0.003618"/>
</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-10-06T01:29:43.074857" elapsed="1.628143"/>
</kw>
<msg time="2026-10-06T01:29:44.703118" 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-10-06T01:29:43.074303" elapsed="1.628938"/>
</kw>
<arg>${system}</arg>
<arg>sudo mn -c</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:29:43.073869" elapsed="1.629541"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:44.707994" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:44.707313" elapsed="0.000808"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:44.707271" elapsed="0.000902"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:44.709020" 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-10-06T01:29:44.709236" 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-10-06T01:29:44.708639" elapsed="0.000653"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:44.710504" level="INFO">Attempting to execute command "sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh" on remote system "10.30.170.234" 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-10-06T01:29:44.709769" elapsed="0.000853"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:44.711847" level="INFO">${conn_id} = 617</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-10-06T01:29:44.711085" elapsed="0.000852"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:29:44.714451" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:29:44.714633" 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-10-06T01:29:44.713810" elapsed="0.000913"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:44.715156" elapsed="0.000704"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:29:44.717971" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:29:45.168719" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:29:15 UTC 2026

  System load:  0.0                Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:29:43 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:29:44.717255" elapsed="0.451764"/>
</kw>
<msg time="2026-10-06T01:29:45.169173" 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-10-06T01:29:44.716269" elapsed="0.453044"/>
</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-10-06T01:29:44.712384" elapsed="0.457091"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:29:45.170258" level="INFO">Executing command 'sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh'.</msg>
<msg time="2026-10-06T01:29:45.213979" level="INFO">Command exited with return code -1.</msg>
<msg time="2026-10-06T01:29:45.214889" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:29:45.215002" level="INFO">${stderr} = </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-10-06T01:29:45.169896" elapsed="0.045154"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:45.215584" elapsed="0.000580"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:45.217382" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:45.216745" elapsed="0.000723"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:45.217973" elapsed="0.000040"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:45.217644" elapsed="0.000435"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:45.217590" elapsed="0.000538"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:29:45.218423" elapsed="0.000062"/>
</return>
<status status="PASS" start="2026-10-06T01:29:45.218237" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:45.218206" elapsed="0.000400"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:45.218703" elapsed="0.000033"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:45.220407" elapsed="0.000711"/>
</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-10-06T01:29:45.221528" elapsed="0.000361"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:45.222225" elapsed="0.000198"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:45.219409" elapsed="0.003121"/>
</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-10-06T01:29:44.706223" elapsed="0.516494"/>
</kw>
<msg time="2026-10-06T01:29:45.222829" 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-10-06T01:29:44.704893" elapsed="0.518074"/>
</kw>
<arg>${system}</arg>
<arg>sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:29:44.703836" elapsed="0.519298"/>
</kw>
<arg>${tools_system}</arg>
<status status="PASS" start="2026-10-06T01:29:43.073509" elapsed="2.149742"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:45.224215" level="INFO">${ovs_opt} = </msg>
<var>${ovs_opt}</var>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:45.223582" elapsed="0.000687"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Catenate" owner="BuiltIn">
<msg time="2026-10-06T01:29:45.225787" level="INFO">${ovs_opt} =   tcp:10.30.171.109:6640</msg>
<var>${ovs_opt}</var>
<arg>${ovs_opt}</arg>
<arg>${SPACE}tcp:${ODL_SYSTEM_${index}_IP}:${ovs_mgr_port}</arg>
<doc>Concatenates the given items together and returns the resulted string.</doc>
<status status="PASS" start="2026-10-06T01:29:45.225019" elapsed="0.000823"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:45.226812" level="INFO">  tcp:10.30.171.109:6640</msg>
<arg>${ovs_opt}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:45.226297" elapsed="0.000627"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:29:45.224649" elapsed="0.002344"/>
</iter>
<iter>
<kw name="Catenate" owner="BuiltIn">
<msg time="2026-10-06T01:29:45.228254" level="INFO">${ovs_opt} =   tcp:10.30.171.109:6640  tcp:10.30.171.171:6640</msg>
<var>${ovs_opt}</var>
<arg>${ovs_opt}</arg>
<arg>${SPACE}tcp:${ODL_SYSTEM_${index}_IP}:${ovs_mgr_port}</arg>
<doc>Concatenates the given items together and returns the resulted string.</doc>
<status status="PASS" start="2026-10-06T01:29:45.227479" elapsed="0.000828"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:45.229264" level="INFO">  tcp:10.30.171.109:6640  tcp:10.30.171.171:6640</msg>
<arg>${ovs_opt}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:45.228755" elapsed="0.000597"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:29:45.227176" elapsed="0.002242"/>
</iter>
<iter>
<kw name="Catenate" owner="BuiltIn">
<msg time="2026-10-06T01:29:45.230659" level="INFO">${ovs_opt} =   tcp:10.30.171.109:6640  tcp:10.30.171.171:6640  tcp:10.30.170.97:6640</msg>
<var>${ovs_opt}</var>
<arg>${ovs_opt}</arg>
<arg>${SPACE}tcp:${ODL_SYSTEM_${index}_IP}:${ovs_mgr_port}</arg>
<doc>Concatenates the given items together and returns the resulted string.</doc>
<status status="PASS" start="2026-10-06T01:29:45.229949" elapsed="0.000801"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:45.231710" level="INFO">  tcp:10.30.171.109:6640  tcp:10.30.171.171:6640  tcp:10.30.170.97:6640</msg>
<arg>${ovs_opt}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:45.231198" elapsed="0.000605"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:29:45.229592" elapsed="0.002278"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:29:45.224381" elapsed="0.007579"/>
</for>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:45.235996" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:45.235605" elapsed="0.000465"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:45.235579" elapsed="0.000523"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:45.236556" 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-10-06T01:29:45.236704" 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-10-06T01:29:45.236367" elapsed="0.000444"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:45.237512" level="INFO">Attempting to execute command "sudo ovs-vsctl set-manager   tcp:10.30.171.109:6640  tcp:10.30.171.171:6640  tcp:10.30.170.97:6640" on remote system "10.30.170.234" 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-10-06T01:29:45.237108" elapsed="0.000464"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:45.238369" level="INFO">${conn_id} = 619</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-10-06T01:29:45.237838" elapsed="0.000564"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:29:45.239597" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:29:45.239715" 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-10-06T01:29:45.239222" elapsed="0.000525"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:45.239979" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:29:45.241468" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:29:45.640657" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:29:15 UTC 2026

  System load:  0.0                Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:29:45 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:29:45.241143" elapsed="0.399807"/>
</kw>
<msg time="2026-10-06T01:29:45.641068" 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-10-06T01:29:45.240596" elapsed="0.400597"/>
</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-10-06T01:29:45.238695" elapsed="0.402650"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:29:45.642132" level="INFO">Executing command 'sudo ovs-vsctl set-manager   tcp:10.30.171.109:6640  tcp:10.30.171.171:6640  tcp:10.30.170.97:6640'.</msg>
<msg time="2026-10-06T01:29:45.685718" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:29:45.686238" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:29:45.686536" level="INFO">${stderr} = </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-10-06T01:29:45.641758" elapsed="0.044823"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:45.686960" elapsed="0.000370"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:45.688262" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:45.687754" elapsed="0.000564"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:45.688715" elapsed="0.000028"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:45.688471" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:45.688421" elapsed="0.000413"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:29:45.689110" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-10-06T01:29:45.688946" elapsed="0.000244"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:45.688884" elapsed="0.000340"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:45.689269" elapsed="0.000018"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:45.690493" elapsed="0.000497"/>
</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-10-06T01:29:45.691252" elapsed="0.004517"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:45.696023" elapsed="0.000146"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:45.689777" elapsed="0.006464"/>
</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-10-06T01:29:45.235009" elapsed="0.461337"/>
</kw>
<msg time="2026-10-06T01:29:45.696417" 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-10-06T01:29:45.233411" elapsed="0.463206"/>
</kw>
<arg>${tools_system}</arg>
<arg>sudo ovs-vsctl set-manager ${ovs_opt}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:29:45.232355" elapsed="0.464388"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify OVS Reports Connected" owner="OVSDB">
<kw name="Verify Ovs-vsctl Output" owner="OVSDB">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:45.704785" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:45.704384" elapsed="0.000476"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:45.704357" elapsed="0.000552"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:45.705360" 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-10-06T01:29:45.705496" 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-10-06T01:29:45.705180" elapsed="0.000351"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:45.706247" level="INFO">Attempting to execute command "sudo ovs-vsctl show" on remote system "10.30.170.234" 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-10-06T01:29:45.705816" elapsed="0.000492"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:45.707020" level="INFO">${conn_id} = 621</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-10-06T01:29:45.706553" elapsed="0.000501"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:29:45.708233" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:29:45.708329" 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-10-06T01:29:45.707838" elapsed="0.000521"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:45.708566" elapsed="0.000441"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:29:45.710511" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:29:46.167918" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:29:15 UTC 2026

  System load:  0.0                Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:29:45 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:29:45.709756" elapsed="0.458547"/>
</kw>
<msg time="2026-10-06T01:29:46.168445" 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-10-06T01:29:45.709232" elapsed="0.459354"/>
</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-10-06T01:29:45.707323" elapsed="0.461460"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:29:46.169665" level="INFO">Executing command 'sudo ovs-vsctl show'.</msg>
<msg time="2026-10-06T01:29:46.192931" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:29:46.193119" level="INFO">${stdout} = 3b16c24e-fe2c-4b90-8d25-329c21bf5e7b
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    Manager "tcp:10.30.171.171:6640"
    ovs_version: "2.17.11"</msg>
<msg time="2026-10-06T01:29:46.193182" level="INFO">${stderr} = </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-10-06T01:29:46.169237" elapsed="0.023976"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:46.193448" elapsed="0.000432"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:46.194985" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:46.194365" elapsed="0.000677"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:46.195431" elapsed="0.000026"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:46.195191" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:46.195139" 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-10-06T01:29:46.195802" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-10-06T01:29:46.195647" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:46.195625" elapsed="0.000320"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:46.196787" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:46.198075" elapsed="0.000472"/>
</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-10-06T01:29:46.198848" elapsed="0.000252"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:46.199302" elapsed="0.000127"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:46.197330" elapsed="0.002167"/>
</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-10-06T01:29:45.703779" elapsed="0.495838"/>
</kw>
<msg time="2026-10-06T01:29:46.199721" 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-10-06T01:29:45.703028" elapsed="0.496778"/>
</kw>
<msg time="2026-10-06T01:29:46.200035" level="INFO">${output} = 3b16c24e-fe2c-4b90-8d25-329c21bf5e7b
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    Manager "tcp:10.30.171.171:6640"
    ovs_version: "2.17.11"</msg>
<var>${output}</var>
<arg>${ovs_system}</arg>
<arg>sudo ovs-vsctl ${vsctl_args}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:29:45.702389" elapsed="0.497692"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:46.200760" level="INFO">3b16c24e-fe2c-4b90-8d25-329c21bf5e7b
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    Manager "tcp:10.30.171.171:6640"
    ovs_version: "2.17.11"</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:46.200382" elapsed="0.000440"/>
</kw>
<if>
<branch type="IF" condition="&quot;${should_match}&quot; == &quot;True&quot;">
<kw name="Should Contain" owner="BuiltIn">
<msg time="2026-10-06T01:29:46.201793" level="FAIL">'3b16c24e-fe2c-4b90-8d25-329c21bf5e7b
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    Manager "tcp:10.30.171.171:6640"
    ovs_version: "2.17.11"' does not contain 'is_connected'</msg>
<arg>${output}</arg>
<arg>${expected_output}</arg>
<doc>Fails if the `container` does not contain the `item` one or more times.</doc>
<status status="FAIL" start="2026-10-06T01:29:46.201230" elapsed="0.000705">'3b16c24e-fe2c-4b90-8d25-329c21bf5e7b
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    Manager "tcp:10.30.171.171:6640"
    ovs_version: "2.17.11"' does not contain 'is_connected'</status>
</kw>
<status status="FAIL" start="2026-10-06T01:29:46.200930" elapsed="0.001112">'3b16c24e-fe2c-4b90-8d25-329c21bf5e7b
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    Manager "tcp:10.30.171.171:6640"
    ovs_version: "2.17.11"' does not contain 'is_connected'</status>
</branch>
<status status="FAIL" start="2026-10-06T01:29:46.200886" elapsed="0.001201">'3b16c24e-fe2c-4b90-8d25-329c21bf5e7b
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    Manager "tcp:10.30.171.171:6640"
    ovs_version: "2.17.11"' does not contain 'is_connected'</status>
</if>
<if>
<branch type="IF" condition="&quot;${should_match}&quot; == &quot;False&quot;">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${output}</arg>
<arg>${expected_output}</arg>
<doc>Fails if the `container` contains the `item`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:46.202400" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:46.202180" elapsed="0.000292"/>
</branch>
<status status="NOT RUN" start="2026-10-06T01:29:46.202156" elapsed="0.000349"/>
</if>
<return>
<value>${output}</value>
<status status="NOT RUN" start="2026-10-06T01:29:46.202563" elapsed="0.000022"/>
</return>
<var>${output}</var>
<arg>show</arg>
<arg>is_connected</arg>
<arg>${tools_system}</arg>
<doc>A wrapper keyword to make it easier to validate ovs-vsctl output, and gives an easy
way to check this output in a WUKS. The argument ${should_match} can control if the match should
exist (True} or not (False) or don't care (anything but True or False). ${should_match} is True by default</doc>
<status status="FAIL" start="2026-10-06T01:29:45.701805" elapsed="0.500937">'3b16c24e-fe2c-4b90-8d25-329c21bf5e7b
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    Manager "tcp:10.30.171.171:6640"
    ovs_version: "2.17.11"' does not contain 'is_connected'</status>
</kw>
<return>
<value>${output}</value>
<status status="NOT RUN" start="2026-10-06T01:29:46.202828" elapsed="0.000024"/>
</return>
<arg>${tools_system}</arg>
<doc>Uses "vsctl show" to check for string "is_connected"</doc>
<status status="FAIL" start="2026-10-06T01:29:45.697806" elapsed="0.505178">'3b16c24e-fe2c-4b90-8d25-329c21bf5e7b
    Manager "tcp:10.30.170.97:6640"
    Manager "tcp:10.30.171.109:6640"
    Manager "tcp:10.30.171.171:6640"
    ovs_version: "2.17.11"' does not contain 'is_connected'</status>
</kw>
<kw name="Verify OVS Reports Connected" owner="OVSDB">
<kw name="Verify Ovs-vsctl Output" owner="OVSDB">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:47.216657" elapsed="0.000078"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:47.216040" elapsed="0.000816"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:47.215991" elapsed="0.000943"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:47.217753" 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-10-06T01:29:47.218006" 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-10-06T01:29:47.217374" elapsed="0.000690"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:47.219267" level="INFO">Attempting to execute command "sudo ovs-vsctl show" on remote system "10.30.170.234" 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-10-06T01:29:47.218489" elapsed="0.001030"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:29:47.221219" level="INFO">${conn_id} = 623</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-10-06T01:29:47.219970" elapsed="0.001306"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:29:47.223330" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:29:47.223489" 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-10-06T01:29:47.222728" elapsed="0.000812"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:47.223931" elapsed="0.000656"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:29:47.226924" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:29:47.634032" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:29:15 UTC 2026

  System load:  0.0                Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:29:46 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:29:47.225860" elapsed="0.409101"/>
</kw>
<msg time="2026-10-06T01:29:47.635085" 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-10-06T01:29:47.225008" elapsed="0.410200"/>
</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-10-06T01:29:47.221751" elapsed="0.413609"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:29:47.636061" level="INFO">Executing command 'sudo ovs-vsctl show'.</msg>
<msg time="2026-10-06T01:29:47.679454" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:29:47.679665" level="INFO">${stdout} = 3b16c24e-fe2c-4b90-8d25-329c21bf5e7b
    Manager "tcp:10.30.170.97:6640"
        is_connected: true
    Manager "tcp:10.30.171.109:6640"
        is_connected: true
    Manager "tcp:10.30.171.171:6640"...</msg>
<msg time="2026-10-06T01:29:47.679772" level="INFO">${stderr} = </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-10-06T01:29:47.635744" elapsed="0.044070"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:47.680068" elapsed="0.000368"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:47.681342" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:47.680868" elapsed="0.000529"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:47.681806" elapsed="0.000027"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:29:47.681550" elapsed="0.000354"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:47.681490" elapsed="0.000454"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:29:47.682147" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-10-06T01:29:47.682019" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:47.681998" elapsed="0.000264"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:29:47.682308" elapsed="0.000019"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:29:47.683554" elapsed="0.000498"/>
</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-10-06T01:29:47.684316" elapsed="0.000250"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:29:47.684794" elapsed="0.000155"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:29:47.682835" elapsed="0.002185"/>
</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-10-06T01:29:47.215008" elapsed="0.470116"/>
</kw>
<msg time="2026-10-06T01:29:47.685197" 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-10-06T01:29:47.213612" elapsed="0.471659"/>
</kw>
<msg time="2026-10-06T01:29:47.686201" level="INFO">${output} = 3b16c24e-fe2c-4b90-8d25-329c21bf5e7b
    Manager "tcp:10.30.170.97:6640"
        is_connected: true
    Manager "tcp:10.30.171.109:6640"
        is_connected: true
    Manager "tcp:10.30.171.171:6640"...</msg>
<var>${output}</var>
<arg>${ovs_system}</arg>
<arg>sudo ovs-vsctl ${vsctl_args}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:29:47.212494" elapsed="0.473747"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:47.686924" level="INFO">3b16c24e-fe2c-4b90-8d25-329c21bf5e7b
    Manager "tcp:10.30.170.97:6640"
        is_connected: true
    Manager "tcp:10.30.171.109:6640"
        is_connected: true
    Manager "tcp:10.30.171.171:6640"
        is_connected: true
    ovs_version: "2.17.11"</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:47.686536" elapsed="0.000451"/>
</kw>
<if>
<branch type="IF" condition="&quot;${should_match}&quot; == &quot;True&quot;">
<kw name="Should Contain" owner="BuiltIn">
<arg>${output}</arg>
<arg>${expected_output}</arg>
<doc>Fails if the `container` does not contain the `item` one or more times.</doc>
<status status="PASS" start="2026-10-06T01:29:47.687381" elapsed="0.000466"/>
</kw>
<status status="PASS" start="2026-10-06T01:29:47.687087" elapsed="0.000825"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:47.687062" elapsed="0.000884"/>
</if>
<if>
<branch type="IF" condition="&quot;${should_match}&quot; == &quot;False&quot;">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${output}</arg>
<arg>${expected_output}</arg>
<doc>Fails if the `container` contains the `item`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:47.688306" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:47.688020" elapsed="0.000360"/>
</branch>
<status status="PASS" start="2026-10-06T01:29:47.687998" elapsed="0.000413"/>
</if>
<return>
<value>${output}</value>
<status status="PASS" start="2026-10-06T01:29:47.688454" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:29:47.688639" level="INFO">${output} = 3b16c24e-fe2c-4b90-8d25-329c21bf5e7b
    Manager "tcp:10.30.170.97:6640"
        is_connected: true
    Manager "tcp:10.30.171.109:6640"
        is_connected: true
    Manager "tcp:10.30.171.171:6640"...</msg>
<var>${output}</var>
<arg>show</arg>
<arg>is_connected</arg>
<arg>${tools_system}</arg>
<doc>A wrapper keyword to make it easier to validate ovs-vsctl output, and gives an easy
way to check this output in a WUKS. The argument ${should_match} can control if the match should
exist (True} or not (False) or don't care (anything but True or False). ${should_match} is True by default</doc>
<status status="PASS" start="2026-10-06T01:29:47.211368" elapsed="0.477331"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-10-06T01:29:47.688772" elapsed="0.000033"/>
</return>
<arg>${tools_system}</arg>
<doc>Uses "vsctl show" to check for string "is_connected"</doc>
<status status="PASS" start="2026-10-06T01:29:47.204331" elapsed="0.484608"/>
</kw>
<msg time="2026-10-06T01:29:47.689050" level="INFO">${output} = 3b16c24e-fe2c-4b90-8d25-329c21bf5e7b
    Manager "tcp:10.30.170.97:6640"
        is_connected: true
    Manager "tcp:10.30.171.109:6640"
        is_connected: true
    Manager "tcp:10.30.171.171:6640"...</msg>
<var>${output}</var>
<arg>5s</arg>
<arg>1s</arg>
<arg>Verify OVS Reports Connected</arg>
<arg>${tools_system}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:29:45.697027" elapsed="1.992058"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:29:47.689697" level="INFO">3b16c24e-fe2c-4b90-8d25-329c21bf5e7b
    Manager "tcp:10.30.170.97:6640"
        is_connected: true
    Manager "tcp:10.30.171.109:6640"
        is_connected: true
    Manager "tcp:10.30.171.171:6640"
        is_connected: true
    ovs_version: "2.17.11"</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:29:47.689362" elapsed="0.000396"/>
</kw>
<kw name="Get From List" owner="Collections">
<msg time="2026-10-06T01:29:47.690260" level="INFO">${controller_index} = 1</msg>
<var>${controller_index}</var>
<arg>${index_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="PASS" start="2026-10-06T01:29:47.690017" elapsed="0.000278"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:47.691564" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:29:47.691156" elapsed="0.000445"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:29:47.691660" elapsed="0.000444"/>
</return>
<msg time="2026-10-06T01:29:47.692260" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${controller_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:29:47.690612" elapsed="0.001681"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:47.696496" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:47.696097" elapsed="0.000444"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:47.708960" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:47.709318" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Mon, 05-Oct-2026 01:29:47 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:29:47.710457" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:47.696791" elapsed="0.013706"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:47.713111" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:29:47.712187" elapsed="0.001157">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:29:47.711776" elapsed="0.001788">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:47.713935" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:47.713666" elapsed="0.000345"/>
</branch>
<status status="FAIL" start="2026-10-06T01:29:47.711742" elapsed="0.002302">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:47.714365" elapsed="0.000030"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:29:47.714488" elapsed="0.000030"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:29:47.711008" elapsed="0.003706">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:29:47.715076" elapsed="0.000033"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:47.715326" elapsed="0.000027"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:47.715587" elapsed="0.000028"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:47.715852" elapsed="0.000044"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:47.716163" elapsed="0.000027"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:47.716585" elapsed="0.000029"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:47.716863" elapsed="0.000045"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:47.717137" elapsed="0.000028"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:47.717381" elapsed="0.000027"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:47.717733" elapsed="0.000028"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:29:47.716377" elapsed="0.001433"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:29:47.716264" elapsed="0.001584"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:29:47.717919" elapsed="0.000021"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:29:47.695460" elapsed="0.022630">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:49.725951" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:49.724939" elapsed="0.001095"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:49.737630" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:49.738167" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:29:49.738480" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:49.726427" elapsed="0.012128"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:49.742284" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:29:49.740951" elapsed="0.001841">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:29:49.740251" elapsed="0.002831">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:49.743580" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:49.743242" elapsed="0.000486"/>
</branch>
<status status="FAIL" start="2026-10-06T01:29:49.740198" elapsed="0.003631">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:49.744438" elapsed="0.000052"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:29:49.744610" elapsed="0.000041"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:29:49.739260" elapsed="0.005715">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:29:49.745508" elapsed="0.000066"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:49.746053" elapsed="0.000048"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:49.746448" elapsed="0.000762"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:49.747597" elapsed="0.000049"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:49.748136" elapsed="0.000045"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:49.748826" elapsed="0.000066"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:49.749245" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:49.749640" elapsed="0.000070"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:49.750078" elapsed="0.000042"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:49.750604" elapsed="0.000048"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:29:49.748468" elapsed="0.002298"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:29:49.748298" elapsed="0.002529"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:29:49.750943" elapsed="0.000033"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:29:49.723397" elapsed="0.027814">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:51.758570" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:51.757667" elapsed="0.000982"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:51.769847" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:51.770326" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:29:51.770852" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:51.759091" elapsed="0.011820"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:51.774528" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:29:51.773195" elapsed="0.001762">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:29:51.772506" elapsed="0.002778">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:51.775807" elapsed="0.000063"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:51.775437" elapsed="0.000510"/>
</branch>
<status status="FAIL" start="2026-10-06T01:29:51.772445" elapsed="0.003553">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:51.776512" elapsed="0.000045"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:29:51.776732" elapsed="0.000044"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:29:51.771530" elapsed="0.005537">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:29:51.777660" elapsed="0.000083"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:51.778113" elapsed="0.000044"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:51.778497" elapsed="0.000041"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:51.778909" elapsed="0.000043"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:51.779396" elapsed="0.000043"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:51.780125" elapsed="0.000043"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:51.780514" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:51.780970" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:51.781444" elapsed="0.000061"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:51.782078" elapsed="0.000045"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:29:51.779785" elapsed="0.002417"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:29:51.779553" elapsed="0.002708"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:29:51.782346" elapsed="0.000032"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:29:51.756231" elapsed="0.026376">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:53.790317" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:53.789496" elapsed="0.000891"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:53.802338" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:53.802795" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:29:53.803141" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:53.790786" elapsed="0.012412"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:53.806624" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:29:53.805396" elapsed="0.001743">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:29:53.804769" elapsed="0.002625">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:53.807923" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:53.807533" elapsed="0.000513"/>
</branch>
<status status="FAIL" start="2026-10-06T01:29:53.804715" elapsed="0.003443">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:53.808703" elapsed="0.000048"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:29:53.808865" elapsed="0.000038"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:29:53.803842" elapsed="0.005297">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:29:53.809650" elapsed="0.000082"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:53.810147" elapsed="0.000045"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:53.810535" elapsed="0.000041"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:53.810952" elapsed="0.000043"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:53.811458" elapsed="0.000042"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:53.812108" elapsed="0.000043"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:53.812496" elapsed="0.000041"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:53.812940" elapsed="0.000044"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:53.813329" elapsed="0.000041"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:53.813844" elapsed="0.000044"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:29:53.811796" elapsed="0.002172"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:29:53.811603" elapsed="0.002422"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:29:53.814108" elapsed="0.000031"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:29:53.788256" elapsed="0.026116">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:55.822433" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:55.821879" elapsed="0.000606"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:55.831995" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:55.832279" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:29:55.832559" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:55.822847" elapsed="0.009746"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:55.834950" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:29:55.834124" elapsed="0.001050">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:29:55.833651" elapsed="0.001721">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:55.835694" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:55.835465" elapsed="0.000345"/>
</branch>
<status status="FAIL" start="2026-10-06T01:29:55.833613" elapsed="0.002231">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:55.836167" elapsed="0.000028"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:29:55.836285" elapsed="0.000025"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:29:55.833071" elapsed="0.003397">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:29:55.836847" elapsed="0.000033"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:55.837093" elapsed="0.000027"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:55.837334" elapsed="0.000026"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:55.837559" elapsed="0.000025"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:55.837893" elapsed="0.000028"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:55.838306" elapsed="0.000026"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:55.838547" elapsed="0.000441"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:55.839230" elapsed="0.000028"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:55.839473" elapsed="0.000026"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:55.839798" elapsed="0.000028"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:29:55.838123" elapsed="0.001751"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:29:55.838004" elapsed="0.001906"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:29:55.839962" elapsed="0.000019"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:29:55.820799" elapsed="0.019326">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:57.846666" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:57.845922" elapsed="0.000861"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:57.856889" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:57.857287" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:29:57.857585" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:57.847152" elapsed="0.010487"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:57.861157" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:29:57.859923" elapsed="0.001661">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:29:57.859272" elapsed="0.002617">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:57.862377" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:57.862037" elapsed="0.000457"/>
</branch>
<status status="FAIL" start="2026-10-06T01:29:57.859220" elapsed="0.003382">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:57.863168" elapsed="0.000046"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:29:57.863307" elapsed="0.000035"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:29:57.858316" elapsed="0.005265">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:29:57.864140" elapsed="0.000051"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:57.864587" elapsed="0.000044"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:57.865027" elapsed="0.000042"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:57.865397" elapsed="0.000039"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:57.865911" elapsed="0.000046"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:57.866523" elapsed="0.000041"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:57.866959" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:57.867423" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:57.867854" elapsed="0.000044"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:57.868320" elapsed="0.000041"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:29:57.866234" elapsed="0.002204"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:29:57.866067" elapsed="0.002427"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:29:57.868575" elapsed="0.000031"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:29:57.844653" elapsed="0.024232">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:29:59.875879" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:29:59.875039" elapsed="0.000915"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:29:59.886670" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:29:59.887176" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:29:59.887640" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:29:59.876351" elapsed="0.011379"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:29:59.891249" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:29:59.889978" elapsed="0.001620">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:29:59.889321" elapsed="0.002642">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:59.893056" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:29:59.892657" elapsed="0.000522"/>
</branch>
<status status="FAIL" start="2026-10-06T01:29:59.889269" elapsed="0.003963">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:59.893781" elapsed="0.000048"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:29:59.893972" elapsed="0.000040"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:29:59.888361" elapsed="0.005910">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:29:59.894848" elapsed="0.000061"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:59.895262" elapsed="0.000045"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:59.895647" elapsed="0.000073"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:59.896071" elapsed="0.000043"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:59.896525" elapsed="0.000042"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:59.897212" elapsed="0.000042"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:59.897605" elapsed="0.000044"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:59.898056" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:59.898443" elapsed="0.000042"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:29:59.898961" elapsed="0.000045"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:29:59.896902" elapsed="0.002181"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:29:59.896709" elapsed="0.002432"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:29:59.899221" elapsed="0.000032"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:29:59.873713" elapsed="0.025770">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:01.905924" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:01.905103" elapsed="0.000889"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:30:01.915868" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:30:01.916264" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:30:01.916554" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:30:01.906353" elapsed="0.010256"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:01.919995" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:30:01.918786" elapsed="0.001647">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:30:01.918144" elapsed="0.002590">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:01.921216" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:01.920880" elapsed="0.000454"/>
</branch>
<status status="FAIL" start="2026-10-06T01:30:01.918098" elapsed="0.003341">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:01.921995" elapsed="0.000046"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:30:01.922129" elapsed="0.000035"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:30:01.917236" elapsed="0.005161">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:30:01.922957" elapsed="0.000052"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:01.923399" elapsed="0.000044"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:01.923826" elapsed="0.000043"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:01.924192" elapsed="0.000040"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:01.924636" elapsed="0.000067"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:01.925275" elapsed="0.000041"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:01.925657" elapsed="0.000085"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:01.926091" elapsed="0.000041"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:01.926467" elapsed="0.000039"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:01.926966" elapsed="0.000043"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:30:01.924987" elapsed="0.002099"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:30:01.924827" elapsed="0.002314"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:30:01.927220" elapsed="0.000031"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:30:01.903960" elapsed="0.023515">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:03.934133" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:03.933368" elapsed="0.000831"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:30:03.944090" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:30:03.944490" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:30:03.944963" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:30:03.934553" elapsed="0.010467"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:03.948419" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:30:03.947195" elapsed="0.001620">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:30:03.946531" elapsed="0.002594">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:03.949607" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:03.949270" elapsed="0.000507"/>
</branch>
<status status="FAIL" start="2026-10-06T01:30:03.946484" elapsed="0.003346">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:03.950330" elapsed="0.000044"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:30:03.950506" elapsed="0.000038"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:30:03.945607" elapsed="0.005231">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:30:03.951351" elapsed="0.000052"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:03.951782" elapsed="0.000046"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:03.952165" elapsed="0.000041"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:03.952521" elapsed="0.000041"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:03.953016" elapsed="0.000044"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:03.953607" elapsed="0.000041"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:03.954046" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:03.954469" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:03.954908" elapsed="0.000043"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:03.955390" elapsed="0.000043"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:30:03.953319" elapsed="0.002189"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:30:03.953161" elapsed="0.002404"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:30:03.955647" elapsed="0.000105"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:30:03.932260" elapsed="0.023739">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:05.962317" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:05.961554" elapsed="0.000826"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:30:05.972211" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:30:05.972605" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:30:05.972950" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:30:05.962790" elapsed="0.010215"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:05.976369" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:30:05.975153" elapsed="0.001674">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:30:05.974507" elapsed="0.002578">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:05.977557" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:05.977224" elapsed="0.000495"/>
</branch>
<status status="FAIL" start="2026-10-06T01:30:05.974458" elapsed="0.003366">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:05.978332" elapsed="0.000044"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:30:05.978464" elapsed="0.000036"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:30:05.973595" elapsed="0.005187">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:30:05.979295" elapsed="0.000051"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:05.979778" elapsed="0.000047"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:05.980167" elapsed="0.000041"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:05.980526" elapsed="0.000040"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:05.981018" elapsed="0.000042"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:05.981618" elapsed="0.000041"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:05.982047" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:05.982432" elapsed="0.000522"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:05.983323" elapsed="0.000043"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:05.983831" elapsed="0.000045"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:30:05.981327" elapsed="0.002628"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:30:05.981166" elapsed="0.002847"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:30:05.984094" elapsed="0.000032"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:30:05.960423" elapsed="0.023935">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:07.991080" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:07.990291" elapsed="0.000857"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:30:08.001791" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:30:08.002186" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:30:08.002582" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:30:07.991506" elapsed="0.011133"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:08.006071" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:30:08.004869" elapsed="0.001529">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:30:08.004188" elapsed="0.002564">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:08.007234" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:08.006901" elapsed="0.000449"/>
</branch>
<status status="FAIL" start="2026-10-06T01:30:08.004142" elapsed="0.003258">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:08.007946" elapsed="0.000045"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:30:08.008127" elapsed="0.000038"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:30:08.003279" elapsed="0.005121">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:30:08.008964" elapsed="0.000051"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:08.009343" elapsed="0.000041"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:08.009762" elapsed="0.000044"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:08.010127" elapsed="0.000039"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:08.010568" elapsed="0.000041"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:08.011209" elapsed="0.000041"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:08.011592" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:08.012028" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:08.012404" elapsed="0.000040"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:08.012913" elapsed="0.000043"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:30:08.010922" elapsed="0.002109"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:30:08.010761" elapsed="0.002325"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:30:08.013164" elapsed="0.000032"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:30:07.989055" elapsed="0.024365">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:10.019651" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:10.018926" elapsed="0.000817"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:30:10.029605" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:30:10.030067" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:30:10.030358" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:30:10.020100" elapsed="0.010312"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:10.033779" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:30:10.032527" elapsed="0.001652">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:30:10.031943" elapsed="0.002488">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:10.035048" elapsed="0.000510"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:10.034571" elapsed="0.001087"/>
</branch>
<status status="FAIL" start="2026-10-06T01:30:10.031896" elapsed="0.003895">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:10.036310" elapsed="0.000046"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:30:10.036442" elapsed="0.000036"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:30:10.031037" elapsed="0.005764">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:30:10.037347" elapsed="0.000051"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:10.037852" elapsed="0.000046"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:10.038234" elapsed="0.000042"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:10.038593" elapsed="0.000063"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:10.039109" elapsed="0.000044"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:10.039763" elapsed="0.000046"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:10.040157" elapsed="0.000041"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:10.040544" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:10.040982" elapsed="0.000043"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:10.041441" elapsed="0.000041"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:30:10.039417" elapsed="0.002153"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:30:10.039256" elapsed="0.002394"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:30:10.041762" elapsed="0.000033"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:30:10.017831" elapsed="0.024194">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:12.048813" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:12.048003" elapsed="0.000878"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:30:12.059013" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:30:12.059416" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:30:12.059935" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:30:12.049241" elapsed="0.010767"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:12.063776" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:30:12.062272" elapsed="0.001841">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:30:12.061554" elapsed="0.003119">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:12.065222" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:12.064874" elapsed="0.000466"/>
</branch>
<status status="FAIL" start="2026-10-06T01:30:12.061506" elapsed="0.003884">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:12.065972" elapsed="0.000047"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:30:12.066159" elapsed="0.000039"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:30:12.060648" elapsed="0.005796">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:30:12.067108" elapsed="0.000053"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:12.067497" elapsed="0.000042"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:12.067996" elapsed="0.000046"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:12.068366" elapsed="0.000040"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:12.068948" elapsed="0.000056"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:12.069582" elapsed="0.000070"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:12.070079" elapsed="0.000044"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:12.070469" elapsed="0.000041"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:12.070911" elapsed="0.000043"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:12.071374" elapsed="0.000040"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:30:12.069292" elapsed="0.002198"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:30:12.069128" elapsed="0.002417"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:30:12.071644" elapsed="0.000057"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:30:12.046568" elapsed="0.025365">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:14.078782" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:14.078015" elapsed="0.000832"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:30:14.088425" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:30:14.088893" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:30:14.089206" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:30:14.079205" elapsed="0.010056"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:14.092734" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:30:14.091459" elapsed="0.001691">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:30:14.090870" elapsed="0.002532">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:14.093927" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:14.093539" elapsed="0.000508"/>
</branch>
<status status="FAIL" start="2026-10-06T01:30:14.090823" elapsed="0.003319">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:14.094673" elapsed="0.000071"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:30:14.094833" elapsed="0.000036"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:30:14.089906" elapsed="0.005197">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:30:14.095633" elapsed="0.000078"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:14.096103" elapsed="0.000044"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:14.096488" elapsed="0.000041"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:14.096904" elapsed="0.000043"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:14.097356" elapsed="0.000039"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:14.097995" elapsed="0.000041"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:14.098378" elapsed="0.000041"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:14.098811" elapsed="0.000043"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:14.099193" elapsed="0.000041"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:14.099671" elapsed="0.000068"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:30:14.097700" elapsed="0.002118"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:30:14.097493" elapsed="0.002381"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:30:14.099952" elapsed="0.000032"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:30:14.076911" elapsed="0.023298">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:16.106998" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:16.106205" elapsed="0.000858"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:30:16.117436" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:30:16.117934" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:30:16.118327" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:30:16.107420" elapsed="0.010963"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:16.121881" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:30:16.120648" elapsed="0.001558">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:30:16.120042" elapsed="0.002465">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:16.123038" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:16.122670" elapsed="0.000488"/>
</branch>
<status status="FAIL" start="2026-10-06T01:30:16.119997" elapsed="0.003212">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:16.123753" elapsed="0.000046"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:30:16.123933" elapsed="0.000037"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:30:16.119106" elapsed="0.005100">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:30:16.124827" elapsed="0.000065"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:16.125285" elapsed="0.000046"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:16.125760" elapsed="0.000046"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:16.126133" elapsed="0.000041"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:16.126614" elapsed="0.000054"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:16.127261" elapsed="0.000041"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:16.127724" elapsed="0.000054"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:16.128128" elapsed="0.003507"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:16.132068" elapsed="0.000047"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:16.132541" elapsed="0.000080"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:30:16.126971" elapsed="0.005771"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:30:16.126813" elapsed="0.005988"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:30:16.132882" elapsed="0.000032"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:30:16.105030" elapsed="0.028115">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get OVSDB UUID" owner="OVSDB">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:18.140107" level="INFO">${uuid} = </msg>
<var>${uuid}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:18.139288" elapsed="0.000885"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:30:18.151121" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:30:18.151574" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology/topology=ovsdb%3A1?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3334'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-10-06T01:30:18.151910" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${controller_http_session}</arg>
<arg>url=${RFC8040_OPERATIONAL_TOPO_OVSDB1_API}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:30:18.140589" elapsed="0.011376"/>
</kw>
<kw name="Log Content" owner="Utils">
<if>
<branch type="IF" condition="'''${resp_content}''' != '${EMPTY}'">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:18.155464" level="FAIL">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${resp_json}</var>
<arg>json.dumps(json.loads('''${resp_content}'''), sort_keys=True, indent=4, separators=(',', ': '))</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-10-06T01:30:18.154193" elapsed="0.001762">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<status status="FAIL" start="2026-10-06T01:30:18.153511" elapsed="0.002704">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${resp_json}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.156801" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:18.156357" elapsed="0.000571"/>
</branch>
<status status="FAIL" start="2026-10-06T01:30:18.153462" elapsed="0.003568">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${resp_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.157614" elapsed="0.000050"/>
</kw>
<return>
<value>${resp_json}</value>
<status status="NOT RUN" start="2026-10-06T01:30:18.157788" elapsed="0.000038"/>
</return>
<arg>${resp.text}</arg>
<status status="FAIL" start="2026-10-06T01:30:18.152578" elapsed="0.005493">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${resp_json}</var>
<arg>${resp.text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.158627" elapsed="0.000084"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${topologies}</var>
<arg>${resp_json}</arg>
<arg>network-topology:topology</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.159110" elapsed="0.000043"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${topology}</var>
<arg>${topologies}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.159518" elapsed="0.000070"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_list}</var>
<arg>${topology}</arg>
<arg>node</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.159953" elapsed="0.000043"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${node_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.160433" elapsed="0.000045"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${node_id}</var>
<arg>${node}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given `dictionary` based on the given `key`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.161119" elapsed="0.000043"/>
</kw>
<kw name="Replace String" owner="String">
<var>${node_uuid}</var>
<arg>${node_id}</arg>
<arg>ovsdb://uuid/</arg>
<arg>${EMPTY}</arg>
<doc>Replaces `search_for` in the given `string` with `replace_with`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.161615" elapsed="0.000048"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${connection_info}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${node}</arg>
<arg>ovsdb:connection-info</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.162051" elapsed="0.000042"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${remote_ip}</var>
<arg>Collections.Get From Dictionary</arg>
<arg>${connection_info}</arg>
<arg>remote-ip</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.162430" elapsed="0.000040"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${uuid}</var>
<arg>'${remote_ip}' == '${ovs_system_ip}'</arg>
<arg>${node_uuid}</arg>
<arg>${uuid}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.162939" elapsed="0.000043"/>
</kw>
<var name="${node}"/>
<status status="NOT RUN" start="2026-10-06T01:30:18.160817" elapsed="0.002241"/>
</iter>
<var>${node}</var>
<value>@{node_list}</value>
<status status="NOT RUN" start="2026-10-06T01:30:18.160608" elapsed="0.002507"/>
</for>
<return>
<value>${uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:30:18.163195" elapsed="0.000042"/>
</return>
<arg>controller_http_session=${session}</arg>
<doc>Queries the topology in the operational datastore and searches for the node that has
the ${ovs_system_ip} argument as the "remote-ip". If found, the value returned will be the value of
node-id stripped of "ovsdb://uuid/". If not found,  will be returned.</doc>
<status status="FAIL" start="2026-10-06T01:30:18.137958" elapsed="0.025537">Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<msg time="2026-10-06T01:30:18.163862" level="FAIL">Keyword 'OVSDB.Get OVSDB UUID' failed after retrying for 30 seconds. The last error was: Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;in...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${ovsdb_uuid}</var>
<arg>30s</arg>
<arg>2s</arg>
<arg>OVSDB.Get OVSDB UUID</arg>
<arg>controller_http_session=${session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-10-06T01:29:47.692566" elapsed="30.471674">Keyword 'OVSDB.Get OVSDB UUID' failed after retrying for 30 seconds. The last error was: Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interfa...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<return>
<value>${ovsdb_uuid}</value>
<status status="NOT RUN" start="2026-10-06T01:30:18.164441" elapsed="0.000033"/>
</return>
<var>${ovsdb_uuid}</var>
<doc>Connect OVS to the list of controllers in the ${controller_index_list} or all if no list is provided.</doc>
<status status="FAIL" start="2026-10-06T01:29:43.071387" elapsed="35.093352">Keyword 'OVSDB.Get OVSDB UUID' failed after retrying for 30 seconds. The last error was: Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interfa...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${ovsdb_uuid}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.165234" elapsed="0.000044"/>
</kw>
<doc>Connect OVS to all cluster instances.</doc>
<status status="FAIL" start="2026-10-06T01:29:42.707314" elapsed="35.458416">Keyword 'OVSDB.Get OVSDB UUID' failed after retrying for 30 seconds. The last error was: Evaluating expression 'json.dumps(json.loads(\'\'\'&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interfa...
    [ Message content over the limit has been removed. ]
...mlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;\'\'\'), sort_keys=True, indent=4, separators=(\',\', \': \'))' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</test>
<test id="s1-s2-s2-t3" name="Check Entity Owner Status And Find Owner and Candidate Before Fail" line="26">
<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-10-06T01:30:18.169806" elapsed="0.000661"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:30:18.169100" elapsed="0.001513"/>
</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-10-06T01:30:18.172874" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:18.172634" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.172590" elapsed="0.000425"/>
</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-10-06T01:30:18.178597" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:18.178371" elapsed="0.000357"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.178330" elapsed="0.000451"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:18.180992" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:18.180147" elapsed="0.000905"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:18.182313" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:18.181628" elapsed="0.000744"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:18.182467" elapsed="0.000090"/>
</return>
<msg time="2026-10-06T01:30:18.182829" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:18.179267" elapsed="0.003616"/>
</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-10-06T01:30:18.188672" elapsed="0.000063"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:18.188445" elapsed="0.000356"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.188403" elapsed="0.000445"/>
</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-10-06T01:30:18.191577" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:18.191360" elapsed="0.000348"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.191318" elapsed="0.000442"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:18.192659" level="INFO">${karaf_connection_index} = 600</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-10-06T01:30:18.192086" elapsed="0.000678"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:18.193740" 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-10-06T01:30:18.193205" elapsed="0.000595"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:18.230039" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:18.195203" elapsed="0.035128"/>
</kw>
<msg time="2026-10-06T01:30:18.230579" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:18.230638" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.194154" elapsed="0.036602"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:18.340452" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:18.231728" elapsed="0.109106"/>
</kw>
<msg time="2026-10-06T01:30:18.341077" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:18.341120" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.230996" elapsed="0.110162"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.341628" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:18.341283" elapsed="0.000441"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.341243" elapsed="0.000511"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:18.342386" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:18.341948" elapsed="0.000533"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.342799" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:18.342561" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.342543" elapsed="0.000355"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:18.342933" elapsed="0.000039"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:18.345749" elapsed="0.000509"/>
</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-10-06T01:30:18.347557" elapsed="0.000763"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:18.349546" elapsed="0.000348"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:18.343869" elapsed="0.006096"/>
</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-10-06T01:30:18.343284" elapsed="0.006808"/>
</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="PASS" start="2026-10-06T01:30:18.190743" elapsed="0.159429"/>
</kw>
<msg time="2026-10-06T01:30:18.350272" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:18.350314" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.189181" elapsed="0.161169"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:18.350508" elapsed="0.000064"/>
</return>
<status status="PASS" start="2026-10-06T01:30:18.350423" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.350405" elapsed="0.000223"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:30:18.350988" elapsed="0.000025"/>
</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-10-06T01:30:18.351360" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:18.351427" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:18.187705" elapsed="0.163809"/>
</kw>
<msg time="2026-10-06T01:30:18.351613" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:18.351655" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.183666" elapsed="0.168046"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.352005" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:18.351785" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.351768" elapsed="0.000310"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:18.183331" elapsed="0.168768"/>
</iter>
<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-10-06T01:30:18.355012" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:18.354607" elapsed="0.000450"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.354588" elapsed="0.000490"/>
</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-10-06T01:30:18.356246" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:18.356149" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.356132" elapsed="0.000179"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:18.356727" level="INFO">${karaf_connection_index} = 602</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-10-06T01:30:18.356457" elapsed="0.000296"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:18.357104" 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-10-06T01:30:18.356917" elapsed="0.000211"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:18.391191" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:18.357759" elapsed="0.033621"/>
</kw>
<msg time="2026-10-06T01:30:18.391561" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:18.391604" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.357296" elapsed="0.034344"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:18.484583" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:18.392310" elapsed="0.092529"/>
</kw>
<msg time="2026-10-06T01:30:18.485019" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:18.485060" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.391840" elapsed="0.093256"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.485447" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:18.485187" elapsed="0.000348"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.485160" elapsed="0.000422"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:18.486187" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:18.485805" elapsed="0.000479"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.486562" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:18.486347" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.486330" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:18.486779" elapsed="0.000035"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:18.489388" elapsed="0.000536"/>
</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-10-06T01:30:18.491177" elapsed="0.000537"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:18.492933" elapsed="0.000544"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:18.487661" elapsed="0.005903"/>
</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-10-06T01:30:18.487093" elapsed="0.006641"/>
</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="PASS" start="2026-10-06T01:30:18.355885" elapsed="0.137932"/>
</kw>
<msg time="2026-10-06T01:30:18.493901" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:18.493941" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.355239" elapsed="0.138738"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:18.494136" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:18.494050" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.494032" elapsed="0.000191"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.494578" elapsed="0.000025"/>
</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-10-06T01:30:18.495161" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:18.495242" 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="PASS" start="2026-10-06T01:30:18.354290" elapsed="0.141044"/>
</kw>
<msg time="2026-10-06T01:30:18.495420" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:18.495460" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.352378" elapsed="0.143117"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.495823" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:18.495580" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.495562" elapsed="0.000334"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:18.352229" elapsed="0.143688"/>
</iter>
<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-10-06T01:30:18.498386" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:18.498297" elapsed="0.000136"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.498278" elapsed="0.000177"/>
</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-10-06T01:30:18.499660" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:18.499575" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.499558" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:18.500167" level="INFO">${karaf_connection_index} = 604</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-10-06T01:30:18.499899" elapsed="0.000293"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:18.500632" 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-10-06T01:30:18.500377" elapsed="0.000281"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:18.535204" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:18.501285" elapsed="0.034107"/>
</kw>
<msg time="2026-10-06T01:30:18.535592" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:18.535635" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.500835" elapsed="0.034835"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:18.645474" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:18.536308" elapsed="0.109442"/>
</kw>
<msg time="2026-10-06T01:30:18.645938" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:18.645981" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.535864" elapsed="0.110156"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.646324" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:18.646099" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.646079" elapsed="0.000346"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:18.647043" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:18.646656" elapsed="0.000483"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.647418" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:18.647206" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.647188" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:18.647585" elapsed="0.000042"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:18.650350" elapsed="0.000577"/>
</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-10-06T01:30:18.652230" elapsed="0.000710"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:18.654157" elapsed="0.000635"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:18.648490" elapsed="0.006379"/>
</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-10-06T01:30:18.647966" elapsed="0.007020"/>
</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="PASS" start="2026-10-06T01:30:18.499300" elapsed="0.155766"/>
</kw>
<msg time="2026-10-06T01:30:18.655152" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:18.655199" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.498637" elapsed="0.156600"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:18.655399" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:30:18.655309" elapsed="0.000147"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.655291" elapsed="0.000187"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.655900" elapsed="0.000025"/>
</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-10-06T01:30:18.656229" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:18.656296" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:30:18.497990" elapsed="0.158393"/>
</kw>
<msg time="2026-10-06T01:30:18.656468" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:18.656510" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.496177" elapsed="0.160397"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.657029" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:18.656665" elapsed="0.000415"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.656643" elapsed="0.000493"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:18.496037" elapsed="0.161125"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:18.182990" elapsed="0.474205"/>
</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-10-06T01:30:18.177549" elapsed="0.479706"/>
</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-10-06T01:30:18.171989" elapsed="0.485322"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.170981" elapsed="0.486376"/>
</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-10-06T01:30:18.168216" elapsed="0.489194"/>
</kw>
<kw name="Get Ovsdb Entity Owner Status For One Device" owner="ClusterOvsdb">
<msg time="2026-10-06T01:30:18.661343" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<var>${original_owner}</var>
<var>${original_candidate_list}</var>
<arg>ovsdb://uuid/${ovsdb_uuid}</arg>
<arg>1</arg>
<doc>Check Entity Owner Status and identify owner and successors for an ovs device ${device}. Request is sent to controller ${controller_index}.</doc>
<status status="FAIL" start="2026-10-06T01:30:18.660094" elapsed="0.001286">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Get From List" owner="Collections">
<var>${original_candidate}</var>
<arg>${original_candidate_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.661576" elapsed="0.000022"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${original_owner}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.661796" elapsed="0.000019"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${original_candidate}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.661984" elapsed="0.000018"/>
</kw>
<doc>Check Entity Owner Status and identify owner and candidate.</doc>
<status status="FAIL" start="2026-10-06T01:30:18.166716" elapsed="0.495420">Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s2-s2-t4" name="Create Bridge Manually and Verify Before Fail" line="35">
<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-10-06T01:30:18.663776" elapsed="0.000203"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:30:18.663481" elapsed="0.000548"/>
</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-10-06T01:30:18.664989" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:18.664900" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.664881" elapsed="0.000171"/>
</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-10-06T01:30:18.667088" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:18.666987" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.666966" elapsed="0.000199"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:18.668219" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:18.667878" elapsed="0.000367"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:18.668720" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:18.668397" elapsed="0.000349"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:18.668788" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:30:18.668917" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:18.667418" elapsed="0.001522"/>
</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-10-06T01:30:18.671692" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:18.671585" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.671562" elapsed="0.000198"/>
</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-10-06T01:30:18.672886" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:18.672800" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.672783" elapsed="0.000167"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:18.673325" level="INFO">${karaf_connection_index} = 600</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-10-06T01:30:18.673096" elapsed="0.000254"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:18.673726" 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-10-06T01:30:18.673512" elapsed="0.000240"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:18.706017" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:18.674316" elapsed="0.031991"/>
</kw>
<msg time="2026-10-06T01:30:18.706500" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:18.706566" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.673906" elapsed="0.032709"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:18.779941" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:18.707316" elapsed="0.072817"/>
</kw>
<msg time="2026-10-06T01:30:18.780295" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:18.780346" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.706845" elapsed="0.073539"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.780791" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:18.780484" elapsed="0.000392"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.780451" elapsed="0.000452"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:18.781447" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:18.781091" elapsed="0.000463"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.781886" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:18.781640" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.781618" elapsed="0.000382"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:18.782035" elapsed="0.000036"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:18.784861" elapsed="0.000493"/>
</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-10-06T01:30:18.786758" elapsed="0.000491"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:18.788556" elapsed="0.000578"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:18.782987" elapsed="0.006216"/>
</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-10-06T01:30:18.782359" elapsed="0.006962"/>
</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="PASS" start="2026-10-06T01:30:18.672500" elapsed="0.116900"/>
</kw>
<msg time="2026-10-06T01:30:18.789489" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:18.789550" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.671910" elapsed="0.117689"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:18.789795" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:18.789705" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.789669" elapsed="0.000205"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:30:18.790217" elapsed="0.000023"/>
</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-10-06T01:30:18.790550" elapsed="0.000028"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:18.790631" 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="PASS" start="2026-10-06T01:30:18.671253" elapsed="0.119594"/>
</kw>
<msg time="2026-10-06T01:30:18.790944" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:18.790984" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.669279" elapsed="0.121742"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.791370" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:18.791142" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.791124" elapsed="0.000318"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:18.669139" elapsed="0.122325"/>
</iter>
<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-10-06T01:30:18.794233" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:18.794146" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.794129" elapsed="0.000168"/>
</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-10-06T01:30:18.795415" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:18.795330" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.795313" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:18.795895" level="INFO">${karaf_connection_index} = 602</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-10-06T01:30:18.795640" elapsed="0.000279"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:18.796351" 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-10-06T01:30:18.796082" elapsed="0.000293"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:18.829167" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:18.796983" elapsed="0.032378"/>
</kw>
<msg time="2026-10-06T01:30:18.829534" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:18.829589" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.796543" elapsed="0.033093"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:18.901772" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:18.830322" elapsed="0.071660"/>
</kw>
<msg time="2026-10-06T01:30:18.902158" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:18.902200" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.829844" elapsed="0.072392"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.902600" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:18.902324" elapsed="0.000394"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.902298" elapsed="0.000451"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:18.903318" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:18.902939" elapsed="0.000467"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.903746" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:18.903468" elapsed="0.000354"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.903451" elapsed="0.000394"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:18.903878" elapsed="0.000034"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:18.906478" elapsed="0.000558"/>
</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-10-06T01:30:18.908341" elapsed="0.000561"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:18.910336" elapsed="0.000386"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:18.904788" elapsed="0.006005"/>
</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-10-06T01:30:18.904193" elapsed="0.006774"/>
</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="PASS" start="2026-10-06T01:30:18.795070" elapsed="0.115980"/>
</kw>
<msg time="2026-10-06T01:30:18.911138" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:18.911179" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.794451" elapsed="0.116764"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:18.911379" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:18.911289" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.911271" elapsed="0.000188"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.911974" elapsed="0.000026"/>
</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-10-06T01:30:18.912288" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:18.912354" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:30:18.793843" elapsed="0.118601"/>
</kw>
<msg time="2026-10-06T01:30:18.912552" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:18.912607" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.791803" elapsed="0.120849"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:18.912975" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:18.912749" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.912732" elapsed="0.000315"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:18.791625" elapsed="0.121444"/>
</iter>
<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-10-06T01:30:18.916004" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:18.915910" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.915890" elapsed="0.000182"/>
</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-10-06T01:30:18.917259" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:18.917174" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:18.917157" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:18.917779" level="INFO">${karaf_connection_index} = 604</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-10-06T01:30:18.917465" elapsed="0.000340"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:18.918160" 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-10-06T01:30:18.917970" elapsed="0.000214"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:18.951061" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:18.918812" elapsed="0.032443"/>
</kw>
<msg time="2026-10-06T01:30:18.951432" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:18.951476" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.918336" elapsed="0.033176"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:19.026655" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:18.952223" elapsed="0.074666"/>
</kw>
<msg time="2026-10-06T01:30:19.027063" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:19.027104" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.951770" elapsed="0.075369"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.027616" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:19.027303" elapsed="0.000432"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.027275" elapsed="0.000495"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.028337" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.027968" elapsed="0.000455"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.028769" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:19.028485" elapsed="0.000359"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.028468" elapsed="0.000399"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:19.028900" elapsed="0.000039"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:19.031984" elapsed="0.000505"/>
</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-10-06T01:30:19.033891" elapsed="0.000485"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:19.035866" elapsed="0.000319"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:19.030125" elapsed="0.006130"/>
</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-10-06T01:30:19.029227" elapsed="0.007146"/>
</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="PASS" start="2026-10-06T01:30:18.916912" elapsed="0.119540"/>
</kw>
<msg time="2026-10-06T01:30:19.036562" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:19.036610" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.916233" elapsed="0.120422"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:19.036920" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:19.036831" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.036812" elapsed="0.000187"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.037333" elapsed="0.000023"/>
</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-10-06T01:30:19.037714" elapsed="0.000031"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:19.037793" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:18.915485" elapsed="0.122399"/>
</kw>
<msg time="2026-10-06T01:30:19.037972" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:19.038013" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.913333" elapsed="0.124715"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.038341" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:19.038120" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.038103" elapsed="0.000309"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:18.913192" elapsed="0.125241"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:18.668992" elapsed="0.369477"/>
</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-10-06T01:30:18.666615" elapsed="0.371935"/>
</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-10-06T01:30:18.664593" elapsed="0.374016"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:18.664173" elapsed="0.374482"/>
</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-10-06T01:30:18.663137" elapsed="0.375615"/>
</kw>
<kw name="Create Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.042861" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:19.042578" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.042555" elapsed="0.000382"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:19.043259" 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-10-06T01:30:19.043353" 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-10-06T01:30:19.043126" elapsed="0.000252"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.043975" level="INFO">Attempting to execute command "sudo ovs-vsctl add-br br-s1" on remote system "10.30.170.234" 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-10-06T01:30:19.043617" elapsed="0.000401"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:19.044497" level="INFO">${conn_id} = 631</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-10-06T01:30:19.044192" elapsed="0.000347"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.045423" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:30:19.045493" 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-10-06T01:30:19.045153" elapsed="0.000378"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:19.045742" elapsed="0.000296"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:30:19.046882" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:30:19.693696" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:30:19 UTC 2026

  System load:  0.08               Processes:             106
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:29:47 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:30:19.046599" elapsed="0.647274"/>
</kw>
<msg time="2026-10-06T01:30:19.693959" 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-10-06T01:30:19.046197" elapsed="0.647853"/>
</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-10-06T01:30:19.044791" elapsed="0.649377"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:30:19.694755" level="INFO">Executing command 'sudo ovs-vsctl add-br br-s1'.</msg>
<msg time="2026-10-06T01:30:19.748333" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:30:19.748624" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:30:19.748776" level="INFO">${stderr} = </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-10-06T01:30:19.694469" elapsed="0.054368"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:19.749211" elapsed="0.000710"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.751093" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.750428" elapsed="0.000751"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:30:19.751629" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:19.751344" elapsed="0.000419"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.751294" elapsed="0.000520"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:30:19.752108" elapsed="0.000058"/>
</return>
<status status="PASS" start="2026-10-06T01:30:19.751923" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.751893" elapsed="0.000391"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:30:19.752351" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:19.754140" elapsed="0.000706"/>
</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-10-06T01:30:19.755257" elapsed="0.000363"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:19.756168" elapsed="0.000206"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:19.753064" elapsed="0.003416"/>
</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-10-06T01:30:19.042121" elapsed="0.714619"/>
</kw>
<msg time="2026-10-06T01:30:19.756856" 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-10-06T01:30:19.041463" elapsed="0.715497"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:30:19.041039" elapsed="0.716080"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.758272" level="INFO">${dictionary_operational} = {'br-s1': '5'}</msg>
<var>${dictionary_operational}</var>
<arg>br-s1=5</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:30:19.757575" elapsed="0.000752"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.759553" level="INFO">${dictionary_config} = {'br-s1': '0'}</msg>
<var>${dictionary_config}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:30:19.758886" elapsed="0.000727"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.770100" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:19.769246" elapsed="0.000911"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.771158" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:19.770491" elapsed="0.000720"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:19.771302" elapsed="0.000059"/>
</return>
<msg time="2026-10-06T01:30:19.771634" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:19.768312" elapsed="0.003424"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.777103" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:30:19.776722" elapsed="0.000415"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:30:19.777195" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:30:19.777362" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:30:19.776216" elapsed="0.001177"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.779060" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.778749" elapsed="0.000370"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.779733" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.779377" elapsed="0.000413"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:30:19.787505" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:30:19.787750" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '144'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:30:19.787906" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:30:19.780207" elapsed="0.007734"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.779875" elapsed="0.008120"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.788241" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:19.788028" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.779852" elapsed="0.008501"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.790334" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.789825" elapsed="0.000573"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.789442" elapsed="0.001001"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.789418" elapsed="0.001057"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.791352" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.790974" elapsed="0.000437"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.790581" elapsed="0.000874"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.790551" elapsed="0.000935"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.792323" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:19.791769" elapsed="0.000590"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.792770" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:19.792448" elapsed="0.000397"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.793466" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:19.793095" elapsed="0.000405"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.792877" elapsed="0.000698"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.792425" elapsed="0.001182"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.794342" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:19.793868" elapsed="0.000509"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.794796" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:19.794464" elapsed="0.000405"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.795483" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:19.795114" elapsed="0.000415"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.794900" elapsed="0.000676"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.794441" elapsed="0.001163"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:19.795821" elapsed="0.000406"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:30:19.796916" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:19.796446" elapsed="0.000513"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:30:19.797171" elapsed="0.000305"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:30:19.788929" elapsed="0.008650"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:30:19.797806" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:30:19.797667" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.797643" elapsed="0.000272"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.798111" elapsed="0.000027"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:30:19.798198" elapsed="0.000019"/>
</return>
<msg time="2026-10-06T01:30:19.798500" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:30:19.777854" elapsed="0.020700"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:30:19.798618" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:30:19.798818" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:30:19.775468" elapsed="0.023385"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.800596" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:30:19.800103" elapsed="0.000635"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:30:19.799610" elapsed="0.001192"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:30:19.799452" elapsed="0.001402"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:30:19.799140" elapsed="0.001856"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:19.772129" elapsed="0.028914"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.804820" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:19.804341" elapsed="0.000525"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:30:19.804939" elapsed="0.000045"/>
</return>
<msg time="2026-10-06T01:30:19.805120" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:30:19.803884" elapsed="0.001269"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.806896" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.806502" elapsed="0.000453"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.807819" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.807221" elapsed="0.000657"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:30:19.822052" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:30:19.822199" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node0onugjjevyaz5kav2bikiz01a3.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Mon, 05-Oct-2026 01:30:19 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:30:19.822318" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:30:19.808281" elapsed="0.014070"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.807965" elapsed="0.014440"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.822702" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:19.822437" elapsed="0.000350"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.807942" elapsed="0.014874"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.824581" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.824111" elapsed="0.000529"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.823780" elapsed="0.000932"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.823756" elapsed="0.000990"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.825538" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.825150" elapsed="0.000447"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.824823" elapsed="0.000817"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.824802" elapsed="0.000868"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.826406" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:19.825930" elapsed="0.000511"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.826862" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:19.826546" elapsed="0.000391"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.827574" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:19.827192" elapsed="0.000416"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.826977" elapsed="0.000676"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.826506" elapsed="0.001194"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.828401" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:19.827934" elapsed="0.000501"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.828847" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:19.828538" elapsed="0.000382"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.829547" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:19.829169" elapsed="0.000412"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.828951" elapsed="0.000674"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.828499" elapsed="0.001154"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:19.829865" elapsed="0.000400"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:30:19.830873" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:19.830542" elapsed="0.000365"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:30:19.831114" elapsed="0.000289"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:30:19.823265" elapsed="0.008215"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:30:19.831765" elapsed="0.000043"/>
</return>
<status status="PASS" start="2026-10-06T01:30:19.831601" elapsed="0.000262"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.831572" elapsed="0.000330"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.832133" elapsed="0.000029"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:30:19.832223" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:30:19.832547" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:30:19.805589" elapsed="0.026999"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:30:19.832653" elapsed="0.000055"/>
</return>
<msg time="2026-10-06T01:30:19.832846" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:30:19.803218" elapsed="0.029661"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.834325" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:30:19.833887" elapsed="0.000528"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:30:19.833642" elapsed="0.000824"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:30:19.833480" elapsed="0.001023"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:30:19.833160" elapsed="0.001446"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:19.801156" elapsed="0.033495"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.840297" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:19.839923" elapsed="0.000408"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:30:19.840389" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:30:19.840588" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:30:19.839384" elapsed="0.001244"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.842385" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.842073" elapsed="0.000370"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.843118" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.842800" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:30:19.861327" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:30:19.861472" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node01ql1g6bmmojox1juom7bkbzdam3.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Mon, 05-Oct-2026 01:30:19 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:30:19.861625" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:30:19.843604" elapsed="0.018056"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.843261" elapsed="0.018483"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.861989" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:19.861779" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.843237" elapsed="0.018861"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.864086" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.863569" elapsed="0.000577"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.863207" elapsed="0.000983"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.863182" elapsed="0.001039"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.865034" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.864638" elapsed="0.000453"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.864291" elapsed="0.000843"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.864270" elapsed="0.000895"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.865919" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:19.865400" elapsed="0.000555"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.866328" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:19.866045" elapsed="0.000355"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.867126" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:19.866666" elapsed="0.000501"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.866431" elapsed="0.000790"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.866022" elapsed="0.001233"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.868140" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:19.867574" elapsed="0.000603"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.868579" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:19.868268" elapsed="0.000402"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.869329" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:19.868959" elapsed="0.000404"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.868731" elapsed="0.000678"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.868245" elapsed="0.001192"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:19.869662" elapsed="0.000435"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:30:19.870638" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:19.870315" elapsed="0.000356"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:30:19.870900" elapsed="0.000291"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:30:19.862566" elapsed="0.008700"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:30:19.871464" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:30:19.871352" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.871328" elapsed="0.000269"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.871812" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:30:19.871906" elapsed="0.000019"/>
</return>
<msg time="2026-10-06T01:30:19.872205" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:30:19.841151" elapsed="0.031088"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:30:19.872302" elapsed="0.000034"/>
</return>
<msg time="2026-10-06T01:30:19.872469" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:30:19.838801" elapsed="0.033701"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.914903" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:30:19.914296" elapsed="0.000689"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:30:19.873346" elapsed="0.041690"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:30:19.873203" elapsed="0.041869"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:30:19.872861" elapsed="0.042273"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:19.834782" elapsed="0.080454"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:19.771868" elapsed="0.143397"/>
</for>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:30:19.767091" elapsed="0.148222"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:30:19.760078" elapsed="0.155286"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.920337" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:19.919976" elapsed="0.000388"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.920897" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:19.920559" elapsed="0.000364"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:19.920967" elapsed="0.000039"/>
</return>
<msg time="2026-10-06T01:30:19.921112" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:19.919499" elapsed="0.001636"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.923979" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:30:19.923635" elapsed="0.000370"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:30:19.924047" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:30:19.924171" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:30:19.923264" elapsed="0.000930"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.925422" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.925199" elapsed="0.000264"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.925961" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.925728" elapsed="0.000273"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:30:19.933261" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:30:19.933468" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '5397'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;ac2dbcf3-79ac-4726-911e-460019f4b3dd&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;7068c841-42e9-4c51-a679-2ed9c41abc27&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;5d7f1f27-d969-4590-a8fc-2bbbf9626dd6&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;f2:bc:2d:ac:26:47&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;16&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:f2:bc:2d:ac:26:47&lt;/datapath-id&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:30:19.933704" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:30:19.926301" elapsed="0.007430"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.926070" elapsed="0.007700"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.933949" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:19.933796" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.926050" elapsed="0.007978"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.935485" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;ac2dbcf3-79ac-4726-911e-460019f4b3dd&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;7068c841-42e9-4c51-a679-2ed9c41abc27&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;5d7f1f27-d969-4590-a8fc-2bbbf9626dd6&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;f2:bc:2d:ac:26:47&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;16&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:f2:bc:2d:ac:26:47&lt;/datapath-id&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.935100" elapsed="0.000503"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.934857" elapsed="0.000780"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.934839" elapsed="0.000821"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.936238" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.935967" elapsed="0.000312"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.935729" elapsed="0.000605"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.935712" elapsed="0.000647"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.937041" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:19.936562" elapsed="0.000506"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.937340" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:19.937134" elapsed="0.000259"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.937871" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:19.937587" elapsed="0.000309"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.937415" elapsed="0.000515"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.937117" elapsed="0.000833"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.938461" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:19.938119" elapsed="0.000367"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.938791" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:19.938571" elapsed="0.000274"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.939289" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:19.939025" elapsed="0.000288"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.938868" elapsed="0.000478"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.938553" elapsed="0.000814"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:19.939521" elapsed="0.000326"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:30:19.940232" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:19.940005" elapsed="0.000252"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:30:19.940407" elapsed="0.000222"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:30:19.934353" elapsed="0.006347"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:30:19.940848" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:19.940765" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.940748" elapsed="0.000179"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.941068" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:30:19.941131" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:30:19.941400" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:30:19.924502" elapsed="0.016926"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:30:19.941474" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:30:19.941611" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:30:19.922849" elapsed="0.018789"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.942668" level="INFO">Item found from container 5 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:30:19.942338" elapsed="0.000429"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:30:19.942180" elapsed="0.000624"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:30:19.942078" elapsed="0.000754"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:30:19.941855" elapsed="0.001024"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:19.921305" elapsed="0.021604"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.945435" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:19.945169" elapsed="0.000290"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:30:19.945550" elapsed="0.000033"/>
</return>
<msg time="2026-10-06T01:30:19.945716" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:30:19.944848" elapsed="0.000895"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.946925" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.946696" elapsed="0.000270"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.947369" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.947153" elapsed="0.000255"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:30:19.958782" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0onugjjevyaz5kav2bikiz01a3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:30:19.958948" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2408'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":41758,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"ac2dbcf3-79ac-4726-911e-460019f4b3dd","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"7068c841-42e9-4c51-a679-2ed9c41abc27","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"5d7f1f27-d969-4590-a8fc-2bbbf9626dd6","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"f2:bc:2d:ac:26:47","ovsdb:ofport":65534,"ovsdb:ifindex":16}],"ovsdb:datapath-id":"00:00:f2:bc:2d:ac:26:47"}]}]}} 
 </msg>
<msg time="2026-10-06T01:30:19.959066" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:30:19.947829" elapsed="0.011262"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.947469" elapsed="0.011668"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.959336" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:19.959164" elapsed="0.000233"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.947452" elapsed="0.011965"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.960935" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":41758,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"ac2dbcf3-79ac-4726-911e-460019f4b3dd","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"7068c841-42e9-4c51-a679-2ed9c41abc27","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"5d7f1f27-d969-4590-a8fc-2bbbf9626dd6","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"f2:bc:2d:ac:26:47","ovsdb:ofport":65534,"ovsdb:ifindex":16}],"ovsdb:datapath-id":"00:00:f2:bc:2d:ac:26:47"}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.960530" elapsed="0.000464"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.960260" elapsed="0.000808"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.960237" elapsed="0.000855"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.961688" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.961385" elapsed="0.000347"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.961145" elapsed="0.000620"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.961129" elapsed="0.000662"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.962322" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:19.961968" elapsed="0.000379"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.962643" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:19.962411" elapsed="0.000301"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.963154" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:19.962891" elapsed="0.000287"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.962735" elapsed="0.000475"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.962394" elapsed="0.000836"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.963767" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:19.963395" elapsed="0.000398"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.964059" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:19.963858" elapsed="0.000253"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.964563" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:19.964288" elapsed="0.000299"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.964133" elapsed="0.000486"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.963840" elapsed="0.000800"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:19.964797" elapsed="0.000295"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:30:19.965480" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:19.965247" elapsed="0.000257"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:30:19.965668" elapsed="0.000231"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:30:19.959863" elapsed="0.006093"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:30:19.966102" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-10-06T01:30:19.966020" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.966003" elapsed="0.000182"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.966326" elapsed="0.000019"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:30:19.966387" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:30:19.966650" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:30:19.946045" elapsed="0.020645"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:30:19.966738" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:30:19.966860" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:30:19.944407" elapsed="0.022478"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.967933" level="INFO">Item found from container 5 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:30:19.967596" elapsed="0.000411"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:30:19.967425" elapsed="0.000618"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:30:19.967317" elapsed="0.000753"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:30:19.967091" elapsed="0.001027"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:19.942989" elapsed="0.025189"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.970772" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:19.970462" elapsed="0.000334"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:30:19.970838" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:30:19.970959" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:30:19.970145" elapsed="0.000836"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.972254" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.972017" elapsed="0.000279"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.972794" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.972482" elapsed="0.000354"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:30:19.987002" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01ql1g6bmmojox1juom7bkbzdam3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:30:19.987137" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2408'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":41758,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"ac2dbcf3-79ac-4726-911e-460019f4b3dd","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"7068c841-42e9-4c51-a679-2ed9c41abc27","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"5d7f1f27-d969-4590-a8fc-2bbbf9626dd6","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"f2:bc:2d:ac:26:47","ovsdb:ofport":65534,"ovsdb:ifindex":16}],"ovsdb:datapath-id":"00:00:f2:bc:2d:ac:26:47"}]}]}} 
 </msg>
<msg time="2026-10-06T01:30:19.987239" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:30:19.973272" elapsed="0.013991"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.973043" elapsed="0.014260"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.987476" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:19.987326" elapsed="0.000229"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.972881" elapsed="0.014698"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.988888" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":41758,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"ac2dbcf3-79ac-4726-911e-460019f4b3dd","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"7068c841-42e9-4c51-a679-2ed9c41abc27","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"5d7f1f27-d969-4590-a8fc-2bbbf9626dd6","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"f2:bc:2d:ac:26:47","ovsdb:ofport":65534,"ovsdb:ifindex":16}],"ovsdb:datapath-id":"00:00:f2:bc:2d:ac:26:47"}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.988494" elapsed="0.000482"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.988258" elapsed="0.000751"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.988241" elapsed="0.000791"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.989690" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:19.989319" elapsed="0.000415"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.989084" elapsed="0.000684"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.989068" elapsed="0.000725"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.990306" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:19.989963" elapsed="0.000368"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.990639" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:19.990395" elapsed="0.000327"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.991262" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:19.990956" elapsed="0.000331"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.990752" elapsed="0.000568"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.990378" elapsed="0.000962"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.991931" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:19.991526" elapsed="0.000431"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.992223" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:19.992021" elapsed="0.000253"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.992746" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:19.992451" elapsed="0.000320"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:19.992296" elapsed="0.000511"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.992004" elapsed="0.000823"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:19.992967" elapsed="0.000289"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:30:19.993649" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:19.993411" elapsed="0.000262"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:30:19.993837" elapsed="0.000209"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:30:19.987920" elapsed="0.006181"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:30:19.994242" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:19.994162" elapsed="0.000135"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.994145" elapsed="0.000174"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:19.994456" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:30:19.994531" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:30:19.994800" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:30:19.971275" elapsed="0.023551"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:30:19.994871" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:30:19.994992" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:30:19.969732" elapsed="0.025283"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:30:19.996188" level="INFO">Item found from container 5 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:30:19.995723" elapsed="0.000537"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:30:19.995551" elapsed="0.000745"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:30:19.995438" elapsed="0.000885"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:30:19.995216" elapsed="0.001154"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:19.968263" elapsed="0.028172"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:19.921187" elapsed="0.075275"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:30:19.918974" elapsed="0.077548"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:30:19.915627" elapsed="0.080945"/>
</kw>
<doc>Create bridge br-s1 using OVS command and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:30:19.040590" elapsed="0.956042"/>
</kw>
<doc>Create bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="PASS" start="2026-10-06T01:30:18.662481" elapsed="1.334276"/>
</test>
<test id="s1-s2-s2-t5" name="Add Port Manually and Verify Before Fail" line="39">
<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-10-06T01:30:19.998356" elapsed="0.000248"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:30:19.998105" elapsed="0.000565"/>
</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-10-06T01:30:19.999651" elapsed="0.000226"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:19.999539" elapsed="0.000373"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:19.999501" elapsed="0.000433"/>
</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-10-06T01:30:20.002018" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:20.001931" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.001911" elapsed="0.000169"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.003096" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:20.002714" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.003575" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:20.003273" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:20.003659" elapsed="0.000053"/>
</return>
<msg time="2026-10-06T01:30:20.003841" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:20.002285" elapsed="0.001580"/>
</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-10-06T01:30:20.006384" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:20.006300" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.006282" elapsed="0.000167"/>
</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-10-06T01:30:20.007742" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:20.007607" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.007584" elapsed="0.000239"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:20.008202" level="INFO">${karaf_connection_index} = 600</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-10-06T01:30:20.007972" elapsed="0.000254"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:20.008642" 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-10-06T01:30:20.008388" elapsed="0.000278"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:20.044063" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:20.009267" elapsed="0.034974"/>
</kw>
<msg time="2026-10-06T01:30:20.044405" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:20.044447" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:20.008843" elapsed="0.035640"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:20.121120" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:20.045118" elapsed="0.076190"/>
</kw>
<msg time="2026-10-06T01:30:20.121519" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:20.121573" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:20.044692" elapsed="0.076931"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.121962" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:20.121744" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.121719" elapsed="0.000339"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.122605" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:20.122237" elapsed="0.000497"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.122997" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:20.122798" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.122781" elapsed="0.000310"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:20.123122" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:20.125928" elapsed="0.000492"/>
</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-10-06T01:30:20.127793" elapsed="0.000478"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:20.129930" elapsed="0.000327"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:20.123976" elapsed="0.006348"/>
</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-10-06T01:30:20.123394" elapsed="0.007047"/>
</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="PASS" start="2026-10-06T01:30:20.007310" elapsed="0.123226"/>
</kw>
<msg time="2026-10-06T01:30:20.130641" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:20.130783" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:20.006647" elapsed="0.124178"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:20.130983" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:20.130898" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.130880" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:30:20.131404" elapsed="0.000024"/>
</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-10-06T01:30:20.131802" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:20.131869" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:20.006010" elapsed="0.125945"/>
</kw>
<msg time="2026-10-06T01:30:20.132039" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:20.132078" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:20.004188" elapsed="0.127925"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.132397" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:20.132180" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.132164" elapsed="0.000303"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:20.004049" elapsed="0.128439"/>
</iter>
<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-10-06T01:30:20.135104" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:20.135019" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.135001" elapsed="0.000165"/>
</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-10-06T01:30:20.136348" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:20.136261" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.136244" elapsed="0.000167"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:20.136876" level="INFO">${karaf_connection_index} = 602</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-10-06T01:30:20.136586" elapsed="0.000315"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:20.137241" 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-10-06T01:30:20.137062" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:20.178083" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:20.137913" elapsed="0.040386"/>
</kw>
<msg time="2026-10-06T01:30:20.178478" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:20.178541" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:20.137419" elapsed="0.041170"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:20.249695" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:20.179311" elapsed="0.070588"/>
</kw>
<msg time="2026-10-06T01:30:20.250064" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:20.250105" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:20.178847" elapsed="0.071294"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.250485" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:20.250258" elapsed="0.000345"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.250231" elapsed="0.000407"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.251227" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:20.250875" elapsed="0.000439"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.251613" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:20.251376" elapsed="0.000361"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.251359" elapsed="0.000409"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:20.251811" elapsed="0.000043"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:20.254459" elapsed="0.000841"/>
</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-10-06T01:30:20.256629" elapsed="0.000718"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:20.258815" elapsed="0.000307"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:20.252695" elapsed="0.006495"/>
</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-10-06T01:30:20.252133" elapsed="0.007174"/>
</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="PASS" start="2026-10-06T01:30:20.135967" elapsed="0.123418"/>
</kw>
<msg time="2026-10-06T01:30:20.259468" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:20.259523" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:20.135313" elapsed="0.124259"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:20.259847" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:20.259662" elapsed="0.000242"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.259640" elapsed="0.000286"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.260253" elapsed="0.000024"/>
</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-10-06T01:30:20.260657" elapsed="0.000048"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:20.260763" elapsed="0.000018"/>
</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="PASS" start="2026-10-06T01:30:20.134715" elapsed="0.126138"/>
</kw>
<msg time="2026-10-06T01:30:20.260939" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:20.260978" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:20.132851" elapsed="0.128163"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.261304" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:20.261084" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.261068" elapsed="0.000310"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:20.132617" elapsed="0.128783"/>
</iter>
<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-10-06T01:30:20.264097" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:20.264011" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.263993" elapsed="0.000167"/>
</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-10-06T01:30:20.265310" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:20.265224" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.265207" elapsed="0.000167"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:20.265830" level="INFO">${karaf_connection_index} = 604</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-10-06T01:30:20.265538" elapsed="0.000317"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:20.266203" 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-10-06T01:30:20.266018" elapsed="0.000209"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:20.301273" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:20.266909" elapsed="0.034545"/>
</kw>
<msg time="2026-10-06T01:30:20.301631" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:20.301673" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:20.266381" elapsed="0.035349"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:20.377307" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:20.302325" elapsed="0.075479"/>
</kw>
<msg time="2026-10-06T01:30:20.378131" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:20.378179" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:20.301902" elapsed="0.076314"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.378744" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:20.378344" elapsed="0.000510"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.378305" elapsed="0.000589"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.379921" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:20.379184" elapsed="0.000874"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.380465" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:20.380157" elapsed="0.000434"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.380130" elapsed="0.000498"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:20.380711" elapsed="0.000061"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:20.384768" elapsed="0.000717"/>
</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-10-06T01:30:20.387320" elapsed="0.001054"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:20.390292" elapsed="0.000526"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:20.382194" elapsed="0.008736"/>
</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-10-06T01:30:20.381327" elapsed="0.009794"/>
</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="PASS" start="2026-10-06T01:30:20.264964" elapsed="0.126283"/>
</kw>
<msg time="2026-10-06T01:30:20.391386" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:20.391452" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:20.264308" elapsed="0.127223"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:20.391903" elapsed="0.000041"/>
</return>
<status status="PASS" start="2026-10-06T01:30:20.391650" elapsed="0.000342"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.391622" elapsed="0.000407"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.392539" elapsed="0.000039"/>
</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-10-06T01:30:20.393035" elapsed="0.000033"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:20.393122" elapsed="0.000019"/>
</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="PASS" start="2026-10-06T01:30:20.263664" elapsed="0.129570"/>
</kw>
<msg time="2026-10-06T01:30:20.393360" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:20.393424" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:20.261826" elapsed="0.131653"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.394035" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:20.393608" elapsed="0.000508"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.393581" elapsed="0.000574"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:20.261538" elapsed="0.132653"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:20.003911" elapsed="0.390331"/>
</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-10-06T01:30:20.001530" elapsed="0.392804"/>
</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-10-06T01:30:19.999260" elapsed="0.395164"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:19.998861" elapsed="0.395633"/>
</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-10-06T01:30:19.997670" elapsed="0.396929"/>
</kw>
<kw name="Add Sample Port To The Manual Bridge And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.398901" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:20.398633" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.398615" elapsed="0.000361"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:20.399338" 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-10-06T01:30:20.399435" 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-10-06T01:30:20.399198" elapsed="0.000262"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.399995" level="INFO">Attempting to execute command "sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan" on remote system "10.30.170.234" 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-10-06T01:30:20.399671" elapsed="0.000415"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:20.400604" level="INFO">${conn_id} = 636</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-10-06T01:30:20.400274" elapsed="0.000355"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.401470" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:30:20.401559" 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-10-06T01:30:20.401205" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:20.401754" elapsed="0.000294"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:30:20.402853" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:30:20.834811" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:30:19 UTC 2026

  System load:  0.08               Processes:             106
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:30:19 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:30:20.402594" elapsed="0.432399"/>
</kw>
<msg time="2026-10-06T01:30:20.835085" 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-10-06T01:30:20.402212" elapsed="0.432968"/>
</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-10-06T01:30:20.400844" elapsed="0.434455"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:30:20.835893" level="INFO">Executing command 'sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan'.</msg>
<msg time="2026-10-06T01:30:20.858764" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:30:20.858919" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:30:20.858975" level="INFO">${stderr} = ovs-vsctl: Error detected while setting up 'vx1': vx1: vxlan type requires valid 'remote_ip' argument.  See ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/var/log/openvswitch"...</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-10-06T01:30:20.835619" elapsed="0.023390"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:20.859229" elapsed="0.000325"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.860315" level="INFO">ovs-vsctl: Error detected while setting up 'vx1': vx1: vxlan type requires valid 'remote_ip' argument.  See ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/var/log/openvswitch".</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:20.859924" elapsed="0.000451"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:30:20.860715" elapsed="0.000025"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:20.860490" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.860452" elapsed="0.000368"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:30:20.861007" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-10-06T01:30:20.860890" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.860870" elapsed="0.000245"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:30:20.861156" elapsed="0.000018"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:20.862314" elapsed="0.000461"/>
</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-10-06T01:30:20.863034" elapsed="0.000214"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:20.863454" elapsed="0.000145"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:20.861628" elapsed="0.002037"/>
</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-10-06T01:30:20.398190" elapsed="0.465596"/>
</kw>
<msg time="2026-10-06T01:30:20.863852" 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-10-06T01:30:20.397642" elapsed="0.466275"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:30:20.397190" elapsed="0.466916"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.864838" level="INFO">${dictionary_operational} = {'vx1': '2'}</msg>
<var>${dictionary_operational}</var>
<arg>vx1=2</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:30:20.864377" elapsed="0.000496"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.865541" level="INFO">${dictionary_config} = {'vx1': '0'}</msg>
<var>${dictionary_config}</var>
<arg>vx1=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:30:20.865136" elapsed="0.000439"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.872275" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:20.871761" elapsed="0.000549"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.872951" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:20.872546" elapsed="0.000439"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:20.873043" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:30:20.873220" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:20.871217" elapsed="0.002035"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.876484" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:30:20.876211" elapsed="0.000316"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:30:20.876569" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:30:20.876709" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:30:20.875890" elapsed="0.000843"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.878101" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:20.877690" elapsed="0.000454"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.878579" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:20.878333" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:30:20.885265" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:30:20.885423" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '144'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:30:20.885530" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:30:20.878933" elapsed="0.006622"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:20.878696" elapsed="0.006898"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.885796" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:20.885619" elapsed="0.000240"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.878665" elapsed="0.007215"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.887164" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:20.886833" elapsed="0.000377"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:20.886577" elapsed="0.000665"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.886559" elapsed="0.000705"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.887855" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:20.887561" elapsed="0.000335"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:20.887314" elapsed="0.000614"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.887299" elapsed="0.000651"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.888513" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:20.888122" elapsed="0.000417"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.888868" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:20.888636" elapsed="0.000285"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.889367" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:20.889100" elapsed="0.000291"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:20.888944" elapsed="0.000480"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.888618" elapsed="0.000826"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.889990" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:20.889627" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.890281" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:20.890080" elapsed="0.000253"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.890812" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:20.890527" elapsed="0.000309"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:20.890356" elapsed="0.000513"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.890063" elapsed="0.000827"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:20.891029" elapsed="0.000290"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:30:20.891769" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:20.891476" elapsed="0.000319"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:30:20.891945" elapsed="0.000215"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:30:20.886219" elapsed="0.005997"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:30:20.892361" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:20.892279" elapsed="0.000137"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.892262" elapsed="0.000177"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.892595" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:30:20.892659" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:30:20.892898" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:30:20.877052" elapsed="0.015872"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:30:20.892970" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:30:20.893090" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:30:20.875436" elapsed="0.017679"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.894157" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:30:20.893841" elapsed="0.000379"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:30:20.893663" elapsed="0.000593"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:30:20.893559" elapsed="0.000725"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:30:20.893321" elapsed="0.001014"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:20.873493" elapsed="0.020873"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.897052" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:20.896782" elapsed="0.000294"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:30:20.897117" elapsed="0.000031"/>
</return>
<msg time="2026-10-06T01:30:20.897247" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:30:20.896425" elapsed="0.000844"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.898422" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:20.898201" elapsed="0.000316"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.898942" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:20.898722" elapsed="0.000260"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:30:20.912835" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0onugjjevyaz5kav2bikiz01a3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:30:20.912940" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:30:20.913025" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:30:20.899267" elapsed="0.013782"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:20.899043" elapsed="0.014045"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.913264" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:20.913113" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.899027" elapsed="0.014316"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.914629" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:20.914277" elapsed="0.000410"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:20.914039" elapsed="0.000682"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.914022" elapsed="0.000721"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.915298" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:20.915032" elapsed="0.000306"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:20.914796" elapsed="0.000574"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.914780" elapsed="0.000611"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.916051" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:20.915609" elapsed="0.000469"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.916348" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:20.916144" elapsed="0.000256"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.916919" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:20.916621" elapsed="0.000323"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:20.916422" elapsed="0.000554"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.916127" elapsed="0.000869"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.917514" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:20.917163" elapsed="0.000381"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.917863" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:20.917625" elapsed="0.000290"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.918351" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:20.918090" elapsed="0.000285"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:20.917937" elapsed="0.000470"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.917604" elapsed="0.000823"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:20.918599" elapsed="0.000335"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:30:20.919310" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:20.919091" elapsed="0.000243"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:30:20.919481" elapsed="0.000298"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:30:20.913692" elapsed="0.006157"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:30:20.920002" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:30:20.919919" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.919902" elapsed="0.000210"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.920257" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:30:20.920321" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:30:20.920563" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:30:20.897577" elapsed="0.023019"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:30:20.920655" elapsed="0.000047"/>
</return>
<msg time="2026-10-06T01:30:20.920804" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:30:20.896011" elapsed="0.024816"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.922077" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:30:20.921765" elapsed="0.000372"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:30:20.921550" elapsed="0.000624"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:30:20.921418" elapsed="0.000783"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:30:20.921049" elapsed="0.001201"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:20.894445" elapsed="0.027836"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.924999" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:20.924725" elapsed="0.000299"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:30:20.925066" elapsed="0.000028"/>
</return>
<msg time="2026-10-06T01:30:20.925188" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:30:20.924336" elapsed="0.000875"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.926870" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:20.926599" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.927325" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:20.927105" elapsed="0.000260"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:30:20.938280" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01ql1g6bmmojox1juom7bkbzdam3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:30:20.938382" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:30:20.938477" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:30:20.927732" elapsed="0.010784"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:20.927427" elapsed="0.011139"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.938793" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:20.938597" elapsed="0.000257"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.927409" elapsed="0.011466"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.940218" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:20.939883" elapsed="0.000377"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:20.939557" elapsed="0.000735"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.939533" elapsed="0.000781"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.940947" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:20.940657" elapsed="0.000331"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:20.940365" elapsed="0.000654"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.940350" elapsed="0.000691"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.941588" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:20.941209" elapsed="0.000412"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.941920" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:20.941708" elapsed="0.000298"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.942458" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:20.942190" elapsed="0.000292"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:20.942031" elapsed="0.000507"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.941689" elapsed="0.000876"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.943113" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:20.942767" elapsed="0.000371"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.943402" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:20.943202" elapsed="0.000254"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.943990" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:20.943708" elapsed="0.000307"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:20.943478" elapsed="0.000570"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.943186" elapsed="0.000882"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:20.944209" elapsed="0.000306"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:30:20.944946" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:20.944718" elapsed="0.000253"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:30:20.945121" elapsed="0.000210"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:30:20.939191" elapsed="0.006195"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:30:20.945563" elapsed="0.000031"/>
</return>
<status status="PASS" start="2026-10-06T01:30:20.945449" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.945432" elapsed="0.000227"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.945816" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:30:20.945880" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:30:20.946096" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:30:20.925517" elapsed="0.020604"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:30:20.946168" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:30:20.946288" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:30:20.923927" elapsed="0.022384"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.949095" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:30:20.948785" elapsed="0.000371"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:30:20.948586" elapsed="0.000607"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:30:20.948450" elapsed="0.000770"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:30:20.948216" elapsed="0.001052"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:20.922362" elapsed="0.026937"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:20.873326" elapsed="0.075999"/>
</for>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:30:20.870403" elapsed="0.078966"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:30:20.865868" elapsed="0.083548"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.954082" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:20.953751" elapsed="0.000356"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.954552" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:20.954257" elapsed="0.000365"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:20.954667" elapsed="0.000043"/>
</return>
<msg time="2026-10-06T01:30:20.954815" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:20.953330" elapsed="0.001508"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.957523" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:30:20.957235" elapsed="0.000319"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:30:20.957608" elapsed="0.000032"/>
</return>
<msg time="2026-10-06T01:30:20.957760" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:30:20.956912" elapsed="0.000872"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.958941" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:20.958717" elapsed="0.000265"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.959389" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:20.959169" elapsed="0.000260"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:30:20.966631" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:30:20.966813" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '6049'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;ac2dbcf3-79ac-4726-911e-460019f4b3dd&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;7068c841-42e9-4c51-a679-2ed9c41abc27&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;5d7f1f27-d969-4590-a8fc-2bbbf9626dd6&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;f2:bc:2d:ac:26:47&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;16&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vx1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;3fbbb227-fb12-4d9e-bf64-4a0592fd05b9&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vx1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;14964271-ec39-4dee-806d-8b37d061c57a&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:f2:bc:2d:ac:26:47&lt;/datapath-id&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:30:20.967010" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:30:20.959802" elapsed="0.007233"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:20.959491" elapsed="0.007583"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.967249" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:20.967097" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.959473" elapsed="0.007854"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.968785" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;ac2dbcf3-79ac-4726-911e-460019f4b3dd&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;7068c841-42e9-4c51-a679-2ed9c41abc27&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;5d7f1f27-d969-4590-a8fc-2bbbf9626dd6&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;f2:bc:2d:ac:26:47&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;16&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vx1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;3fbbb227-fb12-4d9e-bf64-4a0592fd05b9&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vx1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;14964271-ec39-4dee-806d-8b37d061c57a&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:f2:bc:2d:ac:26:47&lt;/datapath-id&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:20.968323" elapsed="0.000598"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:20.968082" elapsed="0.000872"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.968064" elapsed="0.000914"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.969567" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:20.969266" elapsed="0.000354"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:20.969029" elapsed="0.000630"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.969014" elapsed="0.000695"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.970236" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:20.969888" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.970559" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:20.970327" elapsed="0.000301"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.971273" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:20.970850" elapsed="0.000448"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:20.970657" elapsed="0.000675"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.970310" elapsed="0.001044"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.971976" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:20.971555" elapsed="0.000447"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.972273" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:20.972067" elapsed="0.000260"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.972849" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:20.972528" elapsed="0.000346"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:20.972350" elapsed="0.000558"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.972050" elapsed="0.000878"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:20.973071" elapsed="0.000294"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:30:20.973818" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:20.973545" elapsed="0.000298"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:30:20.973993" elapsed="0.000211"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:30:20.967716" elapsed="0.006543"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:30:20.974402" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:30:20.974321" elapsed="0.000136"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.974304" elapsed="0.000176"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.974673" elapsed="0.000040"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:30:20.974758" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:30:20.975032" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:30:20.958076" elapsed="0.016985"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:30:20.975106" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:30:20.975228" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:30:20.956440" elapsed="0.018815"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.976351" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:30:20.976040" elapsed="0.000397"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:30:20.975879" elapsed="0.000594"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:30:20.975755" elapsed="0.000763"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:30:20.975455" elapsed="0.001128"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:20.954993" elapsed="0.021670"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.979311" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:20.979043" elapsed="0.000294"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:30:20.979379" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:30:20.979522" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:30:20.978714" elapsed="0.000839"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.980843" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:20.980573" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.981294" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:20.981076" elapsed="0.000259"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:30:20.992563" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0onugjjevyaz5kav2bikiz01a3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:30:20.992771" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2679'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":41758,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"ac2dbcf3-79ac-4726-911e-460019f4b3dd","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"7068c841-42e9-4c51-a679-2ed9c41abc27","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"5d7f1f27-d969-4590-a8fc-2bbbf9626dd6","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"f2:bc:2d:ac:26:47","ovsdb:ofport":65534,"ovsdb:ifindex":16},{"tp-id":"vx1","ovsdb:port-uuid":"3fbbb227-fb12-4d9e-bf64-4a0592fd05b9","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"14964271-ec39-4dee-806d-8b37d061c57a","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:f2:bc:2d:ac:26:47"}]}]}} 
 </msg>
<msg time="2026-10-06T01:30:20.992877" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:30:20.981700" elapsed="0.011201"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:20.981397" elapsed="0.011543"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.993115" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:20.992964" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.981380" elapsed="0.011812"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.994612" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":41758,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"ac2dbcf3-79ac-4726-911e-460019f4b3dd","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"7068c841-42e9-4c51-a679-2ed9c41abc27","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"5d7f1f27-d969-4590-a8fc-2bbbf9626dd6","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"f2:bc:2d:ac:26:47","ovsdb:ofport":65534,"ovsdb:ifindex":16},{"tp-id":"vx1","ovsdb:port-uuid":"3fbbb227-fb12-4d9e-bf64-4a0592fd05b9","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"14964271-ec39-4dee-806d-8b37d061c57a","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:f2:bc:2d:ac:26:47"}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:20.994160" elapsed="0.000622"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:20.993923" elapsed="0.000899"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.993905" elapsed="0.000942"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.995425" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:20.995149" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:20.994902" elapsed="0.000617"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.994886" elapsed="0.000662"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.996186" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:20.995815" elapsed="0.000396"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.996769" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:20.996470" elapsed="0.000356"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.997276" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:20.997008" elapsed="0.000292"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:20.996849" elapsed="0.000485"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.996259" elapsed="0.001095"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.997952" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:20.997545" elapsed="0.000432"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:20.998246" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:20.998043" elapsed="0.000255"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:20.998822" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:20.998476" elapsed="0.000372"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:20.998320" elapsed="0.000562"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:20.998026" elapsed="0.000876"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:20.999046" elapsed="0.000296"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:30:20.999829" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:20.999516" elapsed="0.000343"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:30:21.000020" elapsed="0.000213"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:30:20.993525" elapsed="0.006766"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:30:21.000437" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-10-06T01:30:21.000354" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.000337" elapsed="0.000210"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:21.000747" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:30:21.000814" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:30:21.001080" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:30:20.979927" elapsed="0.021180"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:30:21.001153" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:30:21.001274" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:30:20.978234" elapsed="0.023065"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.002427" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:30:21.002113" elapsed="0.000408"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:30:21.001952" elapsed="0.000616"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:30:21.001842" elapsed="0.000761"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:30:21.001532" elapsed="0.001133"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:20.976768" elapsed="0.025995"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.005410" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:21.005142" elapsed="0.000293"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:30:21.005476" elapsed="0.000039"/>
</return>
<msg time="2026-10-06T01:30:21.005612" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:30:21.004818" elapsed="0.000817"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.006810" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:21.006572" elapsed="0.000280"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.007258" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:21.007039" elapsed="0.000259"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:30:21.020924" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01ql1g6bmmojox1juom7bkbzdam3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:30:21.021076" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2679'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":41758,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"ac2dbcf3-79ac-4726-911e-460019f4b3dd","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"7068c841-42e9-4c51-a679-2ed9c41abc27","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"5d7f1f27-d969-4590-a8fc-2bbbf9626dd6","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"f2:bc:2d:ac:26:47","ovsdb:ofport":65534,"ovsdb:ifindex":16},{"tp-id":"vx1","ovsdb:port-uuid":"3fbbb227-fb12-4d9e-bf64-4a0592fd05b9","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"14964271-ec39-4dee-806d-8b37d061c57a","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:f2:bc:2d:ac:26:47"}]}]}} 
 </msg>
<msg time="2026-10-06T01:30:21.021182" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:30:21.007599" elapsed="0.013608"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:21.007359" elapsed="0.013887"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:21.021428" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:21.021271" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.007342" elapsed="0.014186"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.022975" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":41758,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"ac2dbcf3-79ac-4726-911e-460019f4b3dd","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"7068c841-42e9-4c51-a679-2ed9c41abc27","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"5d7f1f27-d969-4590-a8fc-2bbbf9626dd6","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"f2:bc:2d:ac:26:47","ovsdb:ofport":65534,"ovsdb:ifindex":16},{"tp-id":"vx1","ovsdb:port-uuid":"3fbbb227-fb12-4d9e-bf64-4a0592fd05b9","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"14964271-ec39-4dee-806d-8b37d061c57a","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:f2:bc:2d:ac:26:47"}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:21.022583" elapsed="0.000490"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:21.022314" elapsed="0.000792"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.022296" elapsed="0.000834"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.023871" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:21.023417" elapsed="0.000496"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:21.023181" elapsed="0.000763"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.023165" elapsed="0.000802"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.024487" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:21.024140" elapsed="0.000385"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:21.024810" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:21.024590" elapsed="0.000274"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.025306" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:21.025043" elapsed="0.000288"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:21.024886" elapsed="0.000478"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.024573" elapsed="0.000811"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.025922" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:21.025563" elapsed="0.000384"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:21.026266" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:21.026011" elapsed="0.000308"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.026789" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:21.026508" elapsed="0.000306"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:21.026342" elapsed="0.000504"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.025994" elapsed="0.000873"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:21.027006" elapsed="0.000291"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:30:21.027752" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:21.027453" elapsed="0.000331"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:30:21.027963" elapsed="0.000212"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:30:21.021964" elapsed="0.006266"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:30:21.028374" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:30:21.028292" elapsed="0.000137"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.028275" elapsed="0.000177"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:21.028632" elapsed="0.000027"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:30:21.028726" elapsed="0.000015"/>
</return>
<msg time="2026-10-06T01:30:21.028993" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:30:21.005952" elapsed="0.023067"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:30:21.029064" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:30:21.029187" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:30:21.004364" elapsed="0.024848"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.030251" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:30:21.029944" elapsed="0.000381"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:30:21.029785" elapsed="0.000576"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:30:21.029665" elapsed="0.000724"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:30:21.029413" elapsed="0.001024"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:21.002849" elapsed="0.027671"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:20.954884" elapsed="0.075665"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:30:20.952850" elapsed="0.077749"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:30:20.949668" elapsed="0.080980"/>
</kw>
<doc>Add Port vx1 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:30:20.396798" elapsed="0.633926"/>
</kw>
<doc>Add port with OVS command and verify it gets applied from all instances.</doc>
<status status="PASS" start="2026-10-06T01:30:19.997082" elapsed="1.033759"/>
</test>
<test id="s1-s2-s2-t6" name="Delete the Bridge Manually and Verify Before Fail" line="43">
<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-10-06T01:30:21.032761" elapsed="0.000201"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:30:21.032465" elapsed="0.000548"/>
</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-10-06T01:30:21.033950" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:21.033862" elapsed="0.000132"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.033842" elapsed="0.000173"/>
</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-10-06T01:30:21.035944" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:21.035860" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.035844" elapsed="0.000163"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.036921" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:21.036581" elapsed="0.000366"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.037364" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:21.037095" elapsed="0.000294"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:21.037429" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:30:21.037569" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:21.036209" elapsed="0.001384"/>
</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-10-06T01:30:21.040329" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:21.040244" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.040226" elapsed="0.000166"/>
</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-10-06T01:30:21.041554" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:21.041457" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.041440" elapsed="0.000178"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:21.042109" level="INFO">${karaf_connection_index} = 600</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-10-06T01:30:21.041787" elapsed="0.000347"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:21.042490" 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-10-06T01:30:21.042299" elapsed="0.000228"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:21.075097" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:21.043125" elapsed="0.032153"/>
</kw>
<msg time="2026-10-06T01:30:21.075453" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:21.075508" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:21.042700" elapsed="0.032858"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:21.169385" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:21.076207" elapsed="0.093410"/>
</kw>
<msg time="2026-10-06T01:30:21.169844" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:21.169887" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:21.075776" elapsed="0.094147"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:21.170203" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:21.169995" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.169977" elapsed="0.000320"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.170904" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:21.170477" elapsed="0.000516"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:21.171255" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:21.171055" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.171038" elapsed="0.000311"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:21.171380" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:21.174069" elapsed="0.000514"/>
</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-10-06T01:30:21.175918" elapsed="0.000476"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:21.177837" elapsed="0.000314"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:21.172263" elapsed="0.005954"/>
</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-10-06T01:30:21.171748" elapsed="0.006587"/>
</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="PASS" start="2026-10-06T01:30:21.041196" elapsed="0.137216"/>
</kw>
<msg time="2026-10-06T01:30:21.178513" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:21.178566" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:21.040553" elapsed="0.138060"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:21.178889" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:21.178798" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.178771" elapsed="0.000197"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:30:21.179297" elapsed="0.000025"/>
</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-10-06T01:30:21.179651" elapsed="0.000046"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:21.179744" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:21.039950" elapsed="0.139881"/>
</kw>
<msg time="2026-10-06T01:30:21.179915" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:21.179955" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:21.037932" elapsed="0.142060"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:21.180276" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:21.180059" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.180043" elapsed="0.000304"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:21.037793" elapsed="0.142575"/>
</iter>
<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-10-06T01:30:21.183166" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:21.183080" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.183062" elapsed="0.000167"/>
</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-10-06T01:30:21.184441" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:21.184356" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.184334" elapsed="0.000197"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:21.184962" level="INFO">${karaf_connection_index} = 602</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-10-06T01:30:21.184732" elapsed="0.000255"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:21.185337" 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-10-06T01:30:21.185152" elapsed="0.000209"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:21.220913" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:21.186000" elapsed="0.035138"/>
</kw>
<msg time="2026-10-06T01:30:21.221321" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:21.221364" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:21.185542" elapsed="0.035857"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:21.302197" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:21.222137" elapsed="0.080255"/>
</kw>
<msg time="2026-10-06T01:30:21.302584" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:21.302635" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:21.221646" elapsed="0.081060"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:21.303017" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:21.302794" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.302768" elapsed="0.000349"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.303715" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:21.303301" elapsed="0.000517"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:21.304080" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:21.303882" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.303865" elapsed="0.000309"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:21.304207" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:21.306917" elapsed="0.000487"/>
</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-10-06T01:30:21.308756" elapsed="0.000474"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:21.310660" elapsed="0.000331"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:21.305115" elapsed="0.005943"/>
</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-10-06T01:30:21.304540" elapsed="0.006637"/>
</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="PASS" start="2026-10-06T01:30:21.184089" elapsed="0.127165"/>
</kw>
<msg time="2026-10-06T01:30:21.311341" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:21.311381" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:21.183379" elapsed="0.128039"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:21.311616" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-10-06T01:30:21.311488" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.311471" elapsed="0.000333"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:21.312192" elapsed="0.000024"/>
</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-10-06T01:30:21.312519" elapsed="0.000032"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:21.312604" elapsed="0.000019"/>
</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="PASS" start="2026-10-06T01:30:21.182773" elapsed="0.129949"/>
</kw>
<msg time="2026-10-06T01:30:21.312809" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:21.312849" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:21.180667" elapsed="0.132219"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:21.313179" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:21.312957" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.312941" elapsed="0.000310"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:21.180476" elapsed="0.132796"/>
</iter>
<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-10-06T01:30:21.316078" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:21.315993" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.315975" elapsed="0.000166"/>
</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-10-06T01:30:21.317284" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:21.317197" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.317180" elapsed="0.000169"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:21.317792" level="INFO">${karaf_connection_index} = 604</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-10-06T01:30:21.317511" elapsed="0.000306"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:21.318165" 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-10-06T01:30:21.317979" elapsed="0.000210"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:21.352293" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:21.318793" elapsed="0.033677"/>
</kw>
<msg time="2026-10-06T01:30:21.352670" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:21.352734" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:21.318343" elapsed="0.034427"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:21.444350" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:21.353358" elapsed="0.091240"/>
</kw>
<msg time="2026-10-06T01:30:21.444801" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:21.444843" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:21.352935" elapsed="0.091944"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:21.445204" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:21.444963" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.444940" elapsed="0.000364"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.445899" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:21.445504" elapsed="0.000483"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:21.446247" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:21.446049" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.446032" elapsed="0.000360"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:21.446425" elapsed="0.000031"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:21.449043" elapsed="0.000502"/>
</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-10-06T01:30:21.450815" elapsed="0.000472"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:21.452480" elapsed="0.000573"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:21.447303" elapsed="0.005819"/>
</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-10-06T01:30:21.446780" elapsed="0.006459"/>
</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="PASS" start="2026-10-06T01:30:21.316936" elapsed="0.136381"/>
</kw>
<msg time="2026-10-06T01:30:21.453401" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:21.453442" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:21.316288" elapsed="0.137190"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:21.453656" elapsed="0.000045"/>
</return>
<status status="PASS" start="2026-10-06T01:30:21.453570" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.453553" elapsed="0.000205"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:21.454081" elapsed="0.000024"/>
</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-10-06T01:30:21.454387" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:21.454452" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:30:21.315653" elapsed="0.138914"/>
</kw>
<msg time="2026-10-06T01:30:21.454671" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:21.454779" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:21.313558" elapsed="0.141267"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:21.455167" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:21.454913" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.454893" elapsed="0.000347"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:21.313388" elapsed="0.141875"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:21.037639" elapsed="0.417657"/>
</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-10-06T01:30:21.035549" elapsed="0.419804"/>
</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-10-06T01:30:21.033574" elapsed="0.421833"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:21.033161" elapsed="0.422291"/>
</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-10-06T01:30:21.032123" elapsed="0.423401"/>
</kw>
<kw name="Delete Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:21.459256" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:21.459024" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.459007" elapsed="0.000323"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:21.459669" 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-10-06T01:30:21.459777" 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-10-06T01:30:21.459535" elapsed="0.000295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.460308" level="INFO">Attempting to execute command "sudo ovs-vsctl del-br br-s1" on remote system "10.30.170.234" 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-10-06T01:30:21.460020" elapsed="0.000331"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:21.460857" level="INFO">${conn_id} = 641</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-10-06T01:30:21.460536" elapsed="0.000345"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.461794" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:30:21.461882" 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-10-06T01:30:21.461433" elapsed="0.000476"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:21.462058" elapsed="0.000285"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:30:21.463185" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:30:21.836363" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:30:19 UTC 2026

  System load:  0.08               Processes:             106
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:30:20 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:30:21.462953" elapsed="0.373553"/>
</kw>
<msg time="2026-10-06T01:30:21.836582" 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-10-06T01:30:21.462523" elapsed="0.374134"/>
</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-10-06T01:30:21.461073" elapsed="0.375700"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:30:21.837261" level="INFO">Executing command 'sudo ovs-vsctl del-br br-s1'.</msg>
<msg time="2026-10-06T01:30:21.920836" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:30:21.921120" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:30:21.921210" level="INFO">${stderr} = </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-10-06T01:30:21.837046" elapsed="0.084212"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:21.921712" elapsed="0.000494"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.923419" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:21.922824" elapsed="0.000715"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:30:21.924005" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:21.923770" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.923716" elapsed="0.000443"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:30:21.924446" elapsed="0.000100"/>
</return>
<status status="PASS" start="2026-10-06T01:30:21.924266" elapsed="0.000370"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.924235" elapsed="0.000500"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:30:21.924829" elapsed="0.000038"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:21.926519" elapsed="0.000667"/>
</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-10-06T01:30:21.927636" elapsed="0.000384"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:21.928381" elapsed="0.000241"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:21.925523" elapsed="0.003234"/>
</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-10-06T01:30:21.458589" elapsed="0.470339"/>
</kw>
<msg time="2026-10-06T01:30:21.929047" 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-10-06T01:30:21.458060" elapsed="0.471090"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl del-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:30:21.457626" elapsed="0.471783"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.930590" level="INFO">${dictionary} = {'br-s1': '0'}</msg>
<var>${dictionary}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:30:21.929909" elapsed="0.000737"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.938028" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:21.937216" elapsed="0.000869"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.939214" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:21.938417" elapsed="0.000865"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:21.939376" elapsed="0.000058"/>
</return>
<msg time="2026-10-06T01:30:21.939716" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:21.936379" elapsed="0.003390"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.945746" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:30:21.945078" elapsed="0.000726"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:30:21.945897" elapsed="0.000057"/>
</return>
<msg time="2026-10-06T01:30:21.946169" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:30:21.944308" elapsed="0.001912"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.949044" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:21.948374" elapsed="0.000773"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.950134" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:21.949606" elapsed="0.000616"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:30:21.964886" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:30:21.965287" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3371'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:30:21.965659" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:30:21.950923" elapsed="0.014823"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:21.950359" elapsed="0.015476"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:21.966233" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:21.965890" elapsed="0.000473"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.950322" elapsed="0.016087"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.969435" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:21.968549" elapsed="0.001092"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:21.968003" elapsed="0.001741"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.967963" elapsed="0.001834"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.971105" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:21.970445" elapsed="0.000751"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:21.969912" elapsed="0.001352"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.969877" elapsed="0.001439"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.972778" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:21.971829" elapsed="0.001008"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:21.973440" elapsed="0.000067"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:21.972982" elapsed="0.000602"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.974631" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:21.974019" elapsed="0.000696"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:21.973634" elapsed="0.001158"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.972945" elapsed="0.001892"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.976024" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:21.975214" elapsed="0.000866"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:21.976719" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:21.976222" elapsed="0.000675"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.977969" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:21.977322" elapsed="0.000701"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:21.976953" elapsed="0.001143"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.976185" elapsed="0.001957"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:21.978449" elapsed="0.000729"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:30:21.980107" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:21.979550" elapsed="0.000612"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:30:21.980605" elapsed="0.000620"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:30:21.967186" elapsed="0.014166"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:30:21.981742" elapsed="0.000058"/>
</return>
<status status="PASS" start="2026-10-06T01:30:21.981515" elapsed="0.000354"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.981453" elapsed="0.000466"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:21.982229" elapsed="0.000045"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:30:21.982372" elapsed="0.000031"/>
</return>
<msg time="2026-10-06T01:30:21.983017" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:30:21.946945" elapsed="0.036134"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:30:21.983182" elapsed="0.000056"/>
</return>
<msg time="2026-10-06T01:30:21.983450" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:30:21.943310" elapsed="0.040218"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.985957" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:30:21.985187" elapsed="0.000926"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:30:21.984829" elapsed="0.001364"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:30:21.984552" elapsed="0.001704"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:30:21.984014" elapsed="0.002351"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:21.940141" elapsed="0.046293"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.990234" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:21.989857" elapsed="0.000411"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:30:21.990326" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:30:21.990512" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:30:21.989360" elapsed="0.001185"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.992213" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:21.991901" elapsed="0.000371"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:21.992877" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:21.992550" elapsed="0.000383"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:30:22.004976" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0onugjjevyaz5kav2bikiz01a3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:30:22.005146" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '1397'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":41758,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:30:22.005322" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:30:21.993545" elapsed="0.011812"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:21.993018" elapsed="0.012393"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.005752" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.005444" elapsed="0.000396"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:21.992995" elapsed="0.012873"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.007791" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":41758,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:22.007250" elapsed="0.000615"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:22.006913" elapsed="0.000998"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.006881" elapsed="0.001062"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.008776" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:22.008346" elapsed="0.000488"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:22.008015" elapsed="0.000864"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.007994" elapsed="0.000917"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.009652" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:22.009152" elapsed="0.000556"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.010088" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.009801" elapsed="0.000360"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.010890" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:22.010411" elapsed="0.000523"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:22.010193" elapsed="0.000800"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.009777" elapsed="0.001253"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.011822" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:22.011293" elapsed="0.000565"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.012234" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.011949" elapsed="0.000358"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.012970" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:22.012575" elapsed="0.000430"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:22.012338" elapsed="0.000713"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.011925" elapsed="0.001154"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:22.013271" elapsed="0.000458"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:30:22.014255" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:22.013950" elapsed="0.000338"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:30:22.014513" elapsed="0.000322"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:30:22.006315" elapsed="0.008599"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:30:22.015113" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-10-06T01:30:22.015000" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.014977" elapsed="0.000244"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.015421" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:30:22.015588" elapsed="0.000023"/>
</return>
<msg time="2026-10-06T01:30:22.015947" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:30:21.990978" elapsed="0.025006"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:30:22.016047" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:30:22.016219" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:30:21.988790" elapsed="0.027463"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.017782" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:30:22.017284" elapsed="0.000588"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:30:22.017064" elapsed="0.000858"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:30:22.016921" elapsed="0.001040"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:30:22.016586" elapsed="0.001441"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:21.986638" elapsed="0.031431"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.021895" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:22.021496" elapsed="0.000434"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:30:22.021987" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:30:22.022156" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:30:22.021037" elapsed="0.001151"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.023954" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:22.023584" elapsed="0.000429"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.024596" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:22.024274" elapsed="0.000379"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:30:22.037226" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01ql1g6bmmojox1juom7bkbzdam3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:30:22.037412" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '1397'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":41758,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:30:22.037576" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:30:22.025072" elapsed="0.012541"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:22.024759" elapsed="0.012942"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.037978" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.037741" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.024734" elapsed="0.013354"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.040093" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":41758,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:22.039449" elapsed="0.000782"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:22.039110" elapsed="0.001168"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.039084" elapsed="0.001225"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.041198" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:22.040818" elapsed="0.000439"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:22.040382" elapsed="0.000919"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.040360" elapsed="0.000972"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.042116" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:22.041595" elapsed="0.000557"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.042542" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.042242" elapsed="0.000375"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.043254" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:22.042886" elapsed="0.000402"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:22.042648" elapsed="0.000686"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.042218" elapsed="0.001144"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.044124" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:22.043630" elapsed="0.000528"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.044545" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.044248" elapsed="0.000371"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.045251" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:30:22.044889" elapsed="0.000395"/>
</kw>
<status status="PASS" start="2026-10-06T01:30:22.044650" elapsed="0.000680"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.044225" elapsed="0.001132"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:22.045585" elapsed="0.000435"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:30:22.046574" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:30:22.046239" elapsed="0.000369"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:30:22.046838" elapsed="0.000294"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:30:22.038585" elapsed="0.008626"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:30:22.047422" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-10-06T01:30:22.047299" elapsed="0.000224"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.047276" elapsed="0.000280"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.047773" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:30:22.047862" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:30:22.048190" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:30:22.022617" elapsed="0.025609"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:30:22.048290" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:30:22.048461" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:30:22.020375" elapsed="0.028135"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.052195" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:30:22.051758" elapsed="0.000529"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:30:22.051471" elapsed="0.000868"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:30:22.051317" elapsed="0.001061"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:30:22.048819" elapsed="0.003626"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:22.018182" elapsed="0.034376"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:21.939884" elapsed="0.112712"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary {'br-s1': '0'}.</doc>
<status status="PASS" start="2026-10-06T01:30:21.935258" elapsed="0.117404"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:30:21.931122" elapsed="0.121630"/>
</kw>
<doc>Delete bridge br-s1 using OVS command and verify it gets applied in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:30:21.457239" elapsed="0.595593"/>
</kw>
<doc>Delete bridge with OVS command and verify it gets deleted from all instances.</doc>
<status status="PASS" start="2026-10-06T01:30:21.031231" elapsed="1.021745"/>
</test>
<test id="s1-s2-s2-t7" name="Create Bridge In Owner and Verify Before Fail" line="47">
<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-10-06T01:30:22.055080" elapsed="0.000275"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:30:22.054732" elapsed="0.000694"/>
</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-10-06T01:30:22.056751" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:22.056605" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.056581" elapsed="0.000258"/>
</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-10-06T01:30:22.059310" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:22.059226" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.059209" elapsed="0.000163"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.060300" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:22.059976" elapsed="0.000351"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.060781" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:22.060476" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:22.060851" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:30:22.060974" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:22.059604" elapsed="0.001393"/>
</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-10-06T01:30:22.063558" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:22.063452" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.063434" elapsed="0.000189"/>
</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-10-06T01:30:22.064848" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:22.064759" elapsed="0.000132"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.064741" elapsed="0.000171"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:22.065287" level="INFO">${karaf_connection_index} = 600</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-10-06T01:30:22.065059" elapsed="0.000252"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:22.065742" 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-10-06T01:30:22.065474" elapsed="0.000299"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:22.099616" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:22.066375" elapsed="0.033450"/>
</kw>
<msg time="2026-10-06T01:30:22.099988" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:22.100029" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.065957" elapsed="0.034107"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:22.177818" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:22.100668" elapsed="0.077337"/>
</kw>
<msg time="2026-10-06T01:30:22.178200" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:22.178242" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.100228" elapsed="0.078049"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.178595" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.178348" elapsed="0.000362"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.178330" elapsed="0.000411"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.179310" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:22.178967" elapsed="0.000430"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.179689" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.179459" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.179442" elapsed="0.000344"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:22.179817" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:22.182373" elapsed="0.000578"/>
</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-10-06T01:30:22.184230" elapsed="0.000552"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:22.186202" elapsed="0.000346"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:22.180636" elapsed="0.005994"/>
</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-10-06T01:30:22.180089" elapsed="0.006713"/>
</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="PASS" start="2026-10-06T01:30:22.064456" elapsed="0.122424"/>
</kw>
<msg time="2026-10-06T01:30:22.186963" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:22.187002" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.063830" elapsed="0.123208"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:22.187192" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:22.187108" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.187090" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:30:22.187614" elapsed="0.000024"/>
</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-10-06T01:30:22.188007" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:22.188073" 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="PASS" start="2026-10-06T01:30:22.063160" elapsed="0.125000"/>
</kw>
<msg time="2026-10-06T01:30:22.188243" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:22.188283" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.061315" elapsed="0.127002"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.188616" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.188385" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.188369" elapsed="0.000336"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:22.061176" elapsed="0.127551"/>
</iter>
<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-10-06T01:30:22.191396" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:22.191311" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.191293" elapsed="0.000167"/>
</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-10-06T01:30:22.192634" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:22.192547" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.192529" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:22.193093" level="INFO">${karaf_connection_index} = 602</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-10-06T01:30:22.192867" elapsed="0.000251"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:22.193460" 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-10-06T01:30:22.193279" elapsed="0.000221"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:22.227425" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:22.194088" elapsed="0.033615"/>
</kw>
<msg time="2026-10-06T01:30:22.227865" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:22.227907" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.193657" elapsed="0.034285"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:22.305212" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:22.228583" elapsed="0.076851"/>
</kw>
<msg time="2026-10-06T01:30:22.305646" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:22.305713" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.228115" elapsed="0.077636"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.306094" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.305845" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.305818" elapsed="0.000377"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.306807" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:22.306381" elapsed="0.000520"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.307163" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.306964" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.306947" elapsed="0.000311"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:22.307293" elapsed="0.000037"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:22.309963" elapsed="0.000486"/>
</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-10-06T01:30:22.311737" elapsed="0.000476"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:22.313562" elapsed="0.000326"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:22.308197" elapsed="0.005757"/>
</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-10-06T01:30:22.307636" elapsed="0.006435"/>
</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="PASS" start="2026-10-06T01:30:22.192237" elapsed="0.121914"/>
</kw>
<msg time="2026-10-06T01:30:22.314238" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:22.314279" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.191636" elapsed="0.122679"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:22.314475" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-10-06T01:30:22.314389" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.314371" elapsed="0.000198"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.314990" elapsed="0.000024"/>
</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-10-06T01:30:22.315360" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:22.315426" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:30:22.191014" elapsed="0.124515"/>
</kw>
<msg time="2026-10-06T01:30:22.315620" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:22.315661" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.188974" elapsed="0.126740"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.316011" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.315789" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.315772" elapsed="0.000310"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:22.188837" elapsed="0.127268"/>
</iter>
<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-10-06T01:30:22.318880" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:22.318794" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.318776" elapsed="0.000167"/>
</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-10-06T01:30:22.320053" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:22.319969" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.319952" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:22.320508" level="INFO">${karaf_connection_index} = 604</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-10-06T01:30:22.320261" elapsed="0.000272"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:22.320903" 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-10-06T01:30:22.320714" elapsed="0.000213"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:22.354530" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:22.321508" elapsed="0.033218"/>
</kw>
<msg time="2026-10-06T01:30:22.354895" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:22.354937" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.321080" elapsed="0.033892"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:22.432773" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:22.355574" elapsed="0.077384"/>
</kw>
<msg time="2026-10-06T01:30:22.433117" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:22.433158" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.355137" elapsed="0.078056"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.433465" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.433263" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.433245" elapsed="0.000333"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.434118" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:22.433782" elapsed="0.000421"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.434459" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.434264" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.434248" elapsed="0.000354"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:22.434634" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:22.437115" elapsed="0.000517"/>
</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-10-06T01:30:22.438884" elapsed="0.000451"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:22.440540" elapsed="0.000541"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:22.435414" elapsed="0.005735"/>
</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-10-06T01:30:22.434920" elapsed="0.006346"/>
</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="PASS" start="2026-10-06T01:30:22.319708" elapsed="0.121635"/>
</kw>
<msg time="2026-10-06T01:30:22.441426" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:22.441466" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.319092" elapsed="0.122425"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:22.441689" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-10-06T01:30:22.441588" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.441571" elapsed="0.000200"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.442081" elapsed="0.000024"/>
</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-10-06T01:30:22.442375" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:22.442440" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:30:22.318459" elapsed="0.124086"/>
</kw>
<msg time="2026-10-06T01:30:22.442631" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:22.442759" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.316369" elapsed="0.126431"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.443094" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.442875" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.442859" elapsed="0.000305"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:22.316227" elapsed="0.126959"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:22.061042" elapsed="0.382172"/>
</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-10-06T01:30:22.058930" elapsed="0.384341"/>
</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-10-06T01:30:22.056219" elapsed="0.387107"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.055648" elapsed="0.387722"/>
</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-10-06T01:30:22.054207" elapsed="0.389215"/>
</kw>
<kw name="Create Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:30:22.447588" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Create bridge br01 in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:30:22.446326" elapsed="0.001297">Variable '${original_owner}' not found.</status>
</kw>
<doc>Create Bridge in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:30:22.053393" elapsed="0.394386">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s2-t8" name="Create Port In Owner and Verify Before Fail" line="51">
<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-10-06T01:30:22.449109" elapsed="0.000198"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:30:22.448865" elapsed="0.000492"/>
</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-10-06T01:30:22.450418" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:22.450315" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.450290" elapsed="0.000268"/>
</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-10-06T01:30:22.452519" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:22.452417" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.452401" elapsed="0.000181"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.453540" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:22.453173" elapsed="0.000393"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.454010" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:22.453736" elapsed="0.000299"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:22.454075" elapsed="0.000030"/>
</return>
<msg time="2026-10-06T01:30:22.454205" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:22.452810" elapsed="0.001418"/>
</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-10-06T01:30:22.456828" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:22.456743" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.456725" elapsed="0.000167"/>
</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-10-06T01:30:22.458035" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:22.457950" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.457932" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:22.458469" level="INFO">${karaf_connection_index} = 600</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-10-06T01:30:22.458242" elapsed="0.000272"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:22.458880" 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-10-06T01:30:22.458694" elapsed="0.000211"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:22.491445" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:22.459467" elapsed="0.032172"/>
</kw>
<msg time="2026-10-06T01:30:22.491828" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:22.491870" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.459058" elapsed="0.032847"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:22.564339" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:22.492524" elapsed="0.072018"/>
</kw>
<msg time="2026-10-06T01:30:22.564724" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:22.564767" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.492070" elapsed="0.072733"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.565080" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.564874" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.564855" elapsed="0.000319"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.565722" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:22.565353" elapsed="0.000458"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.566074" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.565877" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.565861" elapsed="0.000336"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:22.566232" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:22.568717" elapsed="0.000479"/>
</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-10-06T01:30:22.570403" elapsed="0.000500"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:22.572261" elapsed="0.000323"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:22.567049" elapsed="0.005601"/>
</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-10-06T01:30:22.566526" elapsed="0.006257"/>
</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="PASS" start="2026-10-06T01:30:22.457665" elapsed="0.115196"/>
</kw>
<msg time="2026-10-06T01:30:22.572943" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:22.572983" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.457058" elapsed="0.115961"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:22.573173" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:22.573088" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.573071" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:30:22.573586" elapsed="0.000024"/>
</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-10-06T01:30:22.573977" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:22.574044" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:30:22.456424" elapsed="0.117706"/>
</kw>
<msg time="2026-10-06T01:30:22.574213" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:22.574253" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.454589" elapsed="0.119700"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.574589" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.574356" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.574340" elapsed="0.000322"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:22.454429" elapsed="0.120269"/>
</iter>
<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-10-06T01:30:22.577249" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:22.577164" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.577147" elapsed="0.000164"/>
</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-10-06T01:30:22.578399" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:22.578315" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.578298" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:22.578865" level="INFO">${karaf_connection_index} = 602</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-10-06T01:30:22.578619" elapsed="0.000271"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:22.579228" 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-10-06T01:30:22.579049" elapsed="0.000203"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:22.616662" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:22.579851" elapsed="0.037023"/>
</kw>
<msg time="2026-10-06T01:30:22.617032" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:22.617073" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.579406" elapsed="0.037702"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:22.695824" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:22.617842" elapsed="0.078196"/>
</kw>
<msg time="2026-10-06T01:30:22.696215" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:22.696257" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.617313" elapsed="0.078981"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.696630" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.696377" elapsed="0.000350"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.696354" elapsed="0.000400"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.697305" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:22.696937" elapsed="0.000456"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.697666" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.697454" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.697438" elapsed="0.000341"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:22.697814" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:22.700384" elapsed="0.000541"/>
</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-10-06T01:30:22.702170" elapsed="0.000488"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:22.704081" elapsed="0.000311"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:22.698654" elapsed="0.005804"/>
</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-10-06T01:30:22.698122" elapsed="0.006470"/>
</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="PASS" start="2026-10-06T01:30:22.578054" elapsed="0.126617"/>
</kw>
<msg time="2026-10-06T01:30:22.704773" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:22.704813" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.577458" elapsed="0.127392"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:22.705006" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:30:22.704919" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.704902" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.705406" elapsed="0.000024"/>
</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-10-06T01:30:22.705814" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:22.705881" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:22.576873" elapsed="0.129096"/>
</kw>
<msg time="2026-10-06T01:30:22.706054" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:22.706095" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.574954" elapsed="0.131177"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.706419" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.706200" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.706184" elapsed="0.000326"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:22.574809" elapsed="0.131764"/>
</iter>
<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-10-06T01:30:22.709195" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:22.709110" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.709092" elapsed="0.000166"/>
</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-10-06T01:30:22.710352" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:22.710269" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.710252" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:22.710824" level="INFO">${karaf_connection_index} = 604</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-10-06T01:30:22.710572" elapsed="0.000277"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:22.711193" 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-10-06T01:30:22.711009" elapsed="0.000209"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:22.744551" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:22.711900" elapsed="0.032850"/>
</kw>
<msg time="2026-10-06T01:30:22.744927" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:22.744969" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.711372" elapsed="0.033633"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:22.817746" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:22.745604" elapsed="0.072325"/>
</kw>
<msg time="2026-10-06T01:30:22.818087" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:22.818128" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.745171" elapsed="0.072993"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.818439" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.818235" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.818217" elapsed="0.000334"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.819095" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:22.818754" elapsed="0.000426"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.819438" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.819241" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.819225" elapsed="0.000322"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:22.819578" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:22.822067" elapsed="0.000508"/>
</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-10-06T01:30:22.823824" elapsed="0.000459"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:22.825437" elapsed="0.000364"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:22.820357" elapsed="0.005509"/>
</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-10-06T01:30:22.819864" elapsed="0.006115"/>
</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="PASS" start="2026-10-06T01:30:22.710012" elapsed="0.116043"/>
</kw>
<msg time="2026-10-06T01:30:22.826136" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:22.826175" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.709405" elapsed="0.116844"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:22.826410" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:22.826323" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.826305" elapsed="0.000200"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.827042" elapsed="0.000024"/>
</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-10-06T01:30:22.827348" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:22.827413" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:30:22.708811" elapsed="0.118704"/>
</kw>
<msg time="2026-10-06T01:30:22.827600" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:22.827641" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.706850" elapsed="0.120840"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.827979" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.827761" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.827745" elapsed="0.000304"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:22.706709" elapsed="0.121362"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:22.454281" elapsed="0.373817"/>
</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-10-06T01:30:22.452123" elapsed="0.376030"/>
</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-10-06T01:30:22.449949" elapsed="0.378260"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.449516" elapsed="0.378737"/>
</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-10-06T01:30:22.448473" elapsed="0.379831"/>
</kw>
<kw name="Create Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:30:22.832810" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Add Port vx2 to bridge br01 in controller ${controller_index} and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:30:22.831222" elapsed="0.001624">Variable '${original_owner}' not found.</status>
</kw>
<doc>Create Port in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:30:22.447988" elapsed="0.385000">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s2-t9" name="Modify the destination IP of Port In Owner Before Fail" line="55">
<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-10-06T01:30:22.834432" elapsed="0.000214"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:30:22.834185" elapsed="0.000528"/>
</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-10-06T01:30:22.835599" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:22.835510" elapsed="0.000133"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.835492" elapsed="0.000172"/>
</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-10-06T01:30:22.837556" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:22.837450" elapsed="0.000147"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.837433" elapsed="0.000185"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.838555" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:22.838199" elapsed="0.000383"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.839023" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:22.838750" elapsed="0.000298"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:22.839088" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:30:22.839215" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:22.837838" elapsed="0.001399"/>
</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-10-06T01:30:22.841892" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:22.841790" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.841769" elapsed="0.000202"/>
</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-10-06T01:30:22.843098" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:22.843014" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.842997" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:22.843549" level="INFO">${karaf_connection_index} = 600</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-10-06T01:30:22.843302" elapsed="0.000272"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:22.843930" 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-10-06T01:30:22.843750" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:22.877373" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:22.844549" elapsed="0.033079"/>
</kw>
<msg time="2026-10-06T01:30:22.877836" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:22.877880" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.844107" elapsed="0.033809"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:22.971259" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:22.878590" elapsed="0.092866"/>
</kw>
<msg time="2026-10-06T01:30:22.971629" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:22.971671" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.878106" elapsed="0.093625"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.972034" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.971812" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.971788" elapsed="0.000344"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:22.972689" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:22.972316" elapsed="0.000469"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.973043" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.972847" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.972830" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:22.973168" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:22.975745" elapsed="0.000480"/>
</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-10-06T01:30:22.977493" elapsed="0.000524"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:22.979340" elapsed="0.000323"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:22.974019" elapsed="0.005727"/>
</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-10-06T01:30:22.973492" elapsed="0.006369"/>
</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="PASS" start="2026-10-06T01:30:22.842753" elapsed="0.137186"/>
</kw>
<msg time="2026-10-06T01:30:22.980025" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:22.980065" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.842131" elapsed="0.137969"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:22.980305" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:30:22.980218" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.980200" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:30:22.980809" elapsed="0.000024"/>
</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-10-06T01:30:22.981117" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:22.981181" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:30:22.841416" elapsed="0.139851"/>
</kw>
<msg time="2026-10-06T01:30:22.981355" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:22.981395" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.839583" elapsed="0.141848"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:22.981767" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:22.981529" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.981509" elapsed="0.000332"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:22.839430" elapsed="0.142432"/>
</iter>
<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-10-06T01:30:22.984469" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:22.984384" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.984367" elapsed="0.000182"/>
</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-10-06T01:30:22.985647" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:22.985563" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:22.985545" elapsed="0.000188"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:22.986106" level="INFO">${karaf_connection_index} = 602</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-10-06T01:30:22.985877" elapsed="0.000254"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:22.986488" 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-10-06T01:30:22.986290" elapsed="0.000223"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:23.019846" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:22.987091" elapsed="0.032947"/>
</kw>
<msg time="2026-10-06T01:30:23.020198" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:23.020240" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.986667" elapsed="0.033609"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:23.105672" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:23.020930" elapsed="0.085044"/>
</kw>
<msg time="2026-10-06T01:30:23.106185" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:23.106229" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:23.020440" elapsed="0.085825"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:23.106696" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:23.106369" elapsed="0.000405"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.106336" elapsed="0.000465"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:23.107394" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:23.106986" elapsed="0.000581"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:23.107852" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:23.107632" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.107615" elapsed="0.000334"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:23.107983" elapsed="0.000034"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:23.110722" elapsed="0.000487"/>
</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-10-06T01:30:23.112526" elapsed="0.000502"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:23.114402" elapsed="0.000345"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:23.108943" elapsed="0.005875"/>
</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-10-06T01:30:23.108342" elapsed="0.006597"/>
</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="PASS" start="2026-10-06T01:30:22.985281" elapsed="0.129737"/>
</kw>
<msg time="2026-10-06T01:30:23.115105" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:23.115146" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.984710" elapsed="0.130472"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:23.115339" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:23.115253" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.115236" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:23.115845" elapsed="0.000025"/>
</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-10-06T01:30:23.116153" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:23.116218" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:22.984087" elapsed="0.132218"/>
</kw>
<msg time="2026-10-06T01:30:23.116392" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:23.116433" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.982120" elapsed="0.134366"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:23.116797" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:23.116559" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.116542" elapsed="0.000332"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:22.981982" elapsed="0.134913"/>
</iter>
<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-10-06T01:30:23.119604" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:23.119514" elapsed="0.000133"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.119459" elapsed="0.000209"/>
</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-10-06T01:30:23.120794" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:23.120706" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.120669" elapsed="0.000188"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:23.121236" level="INFO">${karaf_connection_index} = 604</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-10-06T01:30:23.121000" elapsed="0.000261"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:23.121624" 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-10-06T01:30:23.121423" elapsed="0.000225"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:23.155917" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:23.122281" elapsed="0.033826"/>
</kw>
<msg time="2026-10-06T01:30:23.156323" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:23.156366" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:23.121820" elapsed="0.034582"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:23.258646" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:23.157031" elapsed="0.101832"/>
</kw>
<msg time="2026-10-06T01:30:23.259025" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:23.259066" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:23.156586" elapsed="0.102516"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:23.259378" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:23.259174" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.259155" elapsed="0.000333"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:23.260028" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:23.259669" elapsed="0.000447"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:23.260374" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:23.260179" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.260162" elapsed="0.000317"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:23.260511" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:23.263021" elapsed="0.000490"/>
</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-10-06T01:30:23.264772" elapsed="0.000454"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:23.266581" elapsed="0.000319"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:23.261294" elapsed="0.005671"/>
</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-10-06T01:30:23.260804" elapsed="0.006275"/>
</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="PASS" start="2026-10-06T01:30:23.120410" elapsed="0.146746"/>
</kw>
<msg time="2026-10-06T01:30:23.267237" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:23.267277" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:23.119833" elapsed="0.147480"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:23.267466" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-10-06T01:30:23.267381" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.267364" elapsed="0.000196"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:23.267953" elapsed="0.000025"/>
</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-10-06T01:30:23.268253" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:23.268318" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:30:23.119176" elapsed="0.149227"/>
</kw>
<msg time="2026-10-06T01:30:23.268500" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:23.268541" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:23.117159" elapsed="0.151417"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:23.268917" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:23.268695" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.268663" elapsed="0.000325"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:23.117020" elapsed="0.151989"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:22.839287" elapsed="0.429749"/>
</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-10-06T01:30:22.837158" elapsed="0.431937"/>
</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-10-06T01:30:22.835244" elapsed="0.433906"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:22.834856" elapsed="0.434338"/>
</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-10-06T01:30:22.833837" elapsed="0.435408"/>
</kw>
<kw name="Modify the destination IP of Sample Port" owner="ClusterOvsdb">
<msg time="2026-10-06T01:30:23.273713" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Modify the dst ip of port vx2 in bridge br01 in controller ${controller_index}.</doc>
<status status="FAIL" start="2026-10-06T01:30:23.272424" elapsed="0.001325">Variable '${original_owner}' not found.</status>
</kw>
<doc>Modify the dst ip of existing port in Owner.</doc>
<status status="FAIL" start="2026-10-06T01:30:22.833201" elapsed="0.440686">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s2-t10" name="Verify Port Is Modified Before Fail" line="59">
<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-10-06T01:30:23.275334" elapsed="0.000214"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:30:23.275089" elapsed="0.000509"/>
</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-10-06T01:30:23.276518" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:23.276417" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.276400" elapsed="0.000180"/>
</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-10-06T01:30:23.278440" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:23.278357" elapsed="0.000136"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.278341" elapsed="0.000173"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:23.279406" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:23.279081" elapsed="0.000350"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:23.279889" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:23.279599" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:23.279954" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:30:23.280078" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:23.278728" elapsed="0.001372"/>
</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-10-06T01:30:23.282822" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:23.282730" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.282710" elapsed="0.000180"/>
</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-10-06T01:30:23.284059" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:23.283975" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.283959" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:23.284542" level="INFO">${karaf_connection_index} = 600</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-10-06T01:30:23.284266" elapsed="0.000302"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:23.284935" 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-10-06T01:30:23.284749" elapsed="0.000210"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:23.318268" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:23.285534" elapsed="0.032913"/>
</kw>
<msg time="2026-10-06T01:30:23.318629" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:23.318670" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:23.285112" elapsed="0.033703"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:23.385581" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:23.319415" elapsed="0.066368"/>
</kw>
<msg time="2026-10-06T01:30:23.385947" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:23.385988" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:23.318987" elapsed="0.067037"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:23.386302" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:23.386096" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.386077" elapsed="0.000318"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:23.386947" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:23.386590" elapsed="0.000439"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:23.387287" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:23.387090" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.387074" elapsed="0.000307"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:23.387412" elapsed="0.000030"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:23.389924" elapsed="0.000472"/>
</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-10-06T01:30:23.391618" elapsed="0.000484"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:23.393439" elapsed="0.000341"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:23.388235" elapsed="0.005611"/>
</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-10-06T01:30:23.387738" elapsed="0.006224"/>
</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="PASS" start="2026-10-06T01:30:23.283717" elapsed="0.110323"/>
</kw>
<msg time="2026-10-06T01:30:23.394122" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:23.394162" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:23.283049" elapsed="0.111148"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:23.394350" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:23.394266" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.394249" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:30:23.394872" elapsed="0.000025"/>
</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-10-06T01:30:23.395170" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:23.395234" 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="PASS" start="2026-10-06T01:30:23.282365" elapsed="0.112955"/>
</kw>
<msg time="2026-10-06T01:30:23.395403" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:23.395444" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:23.280428" elapsed="0.115069"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:23.395837" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:23.395567" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.395551" elapsed="0.000360"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:23.280291" elapsed="0.115641"/>
</iter>
<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-10-06T01:30:23.398486" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:23.398386" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.398369" elapsed="0.000181"/>
</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-10-06T01:30:23.399671" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:23.399588" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.399570" elapsed="0.000187"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:23.400123" level="INFO">${karaf_connection_index} = 602</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-10-06T01:30:23.399900" elapsed="0.000247"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:23.400496" 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-10-06T01:30:23.400306" elapsed="0.000215"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:23.433633" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:23.401106" elapsed="0.032761"/>
</kw>
<msg time="2026-10-06T01:30:23.434028" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:23.434069" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:23.400689" elapsed="0.033417"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:23.505133" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:23.434741" elapsed="0.070622"/>
</kw>
<msg time="2026-10-06T01:30:23.505563" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:23.505606" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:23.434271" elapsed="0.071371"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:23.506015" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:23.505754" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.505727" elapsed="0.000388"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:23.506720" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:23.506299" elapsed="0.000507"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:23.507065" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:23.506868" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.506851" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:23.507190" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:23.509857" elapsed="0.000481"/>
</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-10-06T01:30:23.511640" elapsed="0.000497"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:23.513337" elapsed="0.000331"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:23.508073" elapsed="0.005705"/>
</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-10-06T01:30:23.507511" elapsed="0.006384"/>
</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="PASS" start="2026-10-06T01:30:23.399313" elapsed="0.114660"/>
</kw>
<msg time="2026-10-06T01:30:23.514114" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:23.514155" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:23.398736" elapsed="0.115455"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:23.514347" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:23.514262" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.514245" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:23.514819" elapsed="0.000024"/>
</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-10-06T01:30:23.515127" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:23.515191" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:23.398097" elapsed="0.117180"/>
</kw>
<msg time="2026-10-06T01:30:23.515366" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:23.515407" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:23.396187" elapsed="0.119255"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:23.516039" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:23.515552" elapsed="0.000538"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.515535" elapsed="0.000578"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:23.396048" elapsed="0.120087"/>
</iter>
<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-10-06T01:30:23.518771" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:23.518671" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.518652" elapsed="0.000181"/>
</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-10-06T01:30:23.519932" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:23.519848" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.519832" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:23.520365" level="INFO">${karaf_connection_index} = 604</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-10-06T01:30:23.520136" elapsed="0.000253"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:23.520766" 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-10-06T01:30:23.520565" elapsed="0.000225"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:23.556565" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:23.521353" elapsed="0.035408"/>
</kw>
<msg time="2026-10-06T01:30:23.556940" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:23.556982" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:23.520944" elapsed="0.036072"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:23.628105" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:23.557618" elapsed="0.070668"/>
</kw>
<msg time="2026-10-06T01:30:23.628444" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:23.628508" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:23.557182" elapsed="0.071370"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:23.628925" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:23.628639" elapsed="0.000373"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.628617" elapsed="0.000455"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:23.629637" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:23.629258" elapsed="0.000478"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:23.630003" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:23.629800" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.629783" elapsed="0.000316"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:23.630130" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:23.632615" elapsed="0.000511"/>
</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-10-06T01:30:23.634382" elapsed="0.000511"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:23.636233" elapsed="0.000319"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:23.630945" elapsed="0.005673"/>
</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-10-06T01:30:23.630398" elapsed="0.006352"/>
</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="PASS" start="2026-10-06T01:30:23.519565" elapsed="0.117262"/>
</kw>
<msg time="2026-10-06T01:30:23.636909" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:23.636949" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:23.518979" elapsed="0.118005"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:23.637137" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:23.637053" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.637036" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:23.637647" elapsed="0.000118"/>
</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-10-06T01:30:23.638277" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:23.638344" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:23.518354" elapsed="0.120077"/>
</kw>
<msg time="2026-10-06T01:30:23.638530" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:23.638570" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:23.516398" elapsed="0.122208"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:23.638911" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:23.638690" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:23.638659" elapsed="0.000323"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:23.516257" elapsed="0.122746"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:23.280150" elapsed="0.358880"/>
</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-10-06T01:30:23.278065" elapsed="0.361019"/>
</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-10-06T01:30:23.276162" elapsed="0.362976"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:23.275760" elapsed="0.363423"/>
</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-10-06T01:30:23.274750" elapsed="0.364484"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:30:23.641615" level="INFO">${port_dictionary} = {'br01': '6', 'vx2': '3', '10.0.0.19': '1'}</msg>
<var>${port_dictionary}</var>
<arg>br01=6</arg>
<arg>vx2=3</arg>
<arg>10.0.0.19=1</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:30:23.641252" elapsed="0.000389"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:30:23.646318" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:30:23.645023" elapsed="0.001331">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:30:24.656248" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:30:24.653226" elapsed="0.003120">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:30:25.661635" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:30:25.660235" elapsed="0.001468">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:30:26.671809" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:30:26.668483" elapsed="0.003424">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:30:27.681545" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:30:27.678557" elapsed="0.003079">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:30:28.691930" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:30:28.688759" elapsed="0.003270">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<msg time="2026-10-06T01:30:28.692244" level="FAIL">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</msg>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-10-06T01:30:23.641894" elapsed="5.050650">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:30:23.640886" elapsed="5.051948">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify port is modified in all instances.</doc>
<status status="FAIL" start="2026-10-06T01:30:23.274242" elapsed="5.418881">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s2-s2-t11" name="Delete Port In Owner Before Fail" line="63">
<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-10-06T01:30:28.696579" elapsed="0.000558"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:30:28.695986" elapsed="0.001264"/>
</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-10-06T01:30:28.699622" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:28.699355" elapsed="0.000403"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:28.699308" elapsed="0.000501"/>
</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-10-06T01:30:28.704479" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:28.704184" elapsed="0.000400"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:28.704146" elapsed="0.000484"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:28.706856" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:28.705998" elapsed="0.000915"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:28.707940" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:28.707248" elapsed="0.000747"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:28.708087" elapsed="0.000064"/>
</return>
<msg time="2026-10-06T01:30:28.708507" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:28.705130" elapsed="0.003429"/>
</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-10-06T01:30:28.714490" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:28.714251" elapsed="0.000362"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:28.714212" elapsed="0.000462"/>
</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-10-06T01:30:28.717435" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:28.717219" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:28.717181" elapsed="0.000401"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:28.718509" level="INFO">${karaf_connection_index} = 600</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-10-06T01:30:28.717941" elapsed="0.000640"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:28.719515" 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-10-06T01:30:28.719056" elapsed="0.000515"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:28.753540" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:28.721140" elapsed="0.032682"/>
</kw>
<msg time="2026-10-06T01:30:28.754047" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:28.754106" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:28.720068" elapsed="0.034087"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:28.815576" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:28.755059" elapsed="0.060718"/>
</kw>
<msg time="2026-10-06T01:30:28.815938" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:28.815979" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:28.754388" elapsed="0.061627"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:28.816296" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:28.816086" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:28.816067" elapsed="0.000323"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:28.816973" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:28.816594" elapsed="0.000463"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:28.817318" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:28.817119" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:28.817102" elapsed="0.000325"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:28.817459" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:28.820077" elapsed="0.000499"/>
</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-10-06T01:30:28.821837" elapsed="0.000477"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:28.823776" elapsed="0.000318"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:28.818282" elapsed="0.005878"/>
</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-10-06T01:30:28.817774" elapsed="0.006503"/>
</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="PASS" start="2026-10-06T01:30:28.716590" elapsed="0.107765"/>
</kw>
<msg time="2026-10-06T01:30:28.824502" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:28.824543" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:28.715132" elapsed="0.109446"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:28.824813" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:28.824649" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:28.824631" elapsed="0.000262"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:30:28.825217" elapsed="0.000024"/>
</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-10-06T01:30:28.825529" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:28.825594" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:28.713571" elapsed="0.112125"/>
</kw>
<msg time="2026-10-06T01:30:28.825783" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:28.825824" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:28.709348" elapsed="0.116511"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:28.826151" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:28.825927" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:28.825911" elapsed="0.000312"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:28.709026" elapsed="0.117217"/>
</iter>
<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-10-06T01:30:28.828871" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:28.828786" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:28.828768" elapsed="0.000165"/>
</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-10-06T01:30:28.830129" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:28.830044" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:28.830026" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:28.830574" level="INFO">${karaf_connection_index} = 602</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-10-06T01:30:28.830334" elapsed="0.000266"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:28.830960" 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-10-06T01:30:28.830777" elapsed="0.000207"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:28.870101" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:28.831606" elapsed="0.038686"/>
</kw>
<msg time="2026-10-06T01:30:28.870474" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:28.870518" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:28.831139" elapsed="0.039415"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:28.948461" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:28.871173" elapsed="0.077570"/>
</kw>
<msg time="2026-10-06T01:30:28.948954" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:28.948997" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:28.870745" elapsed="0.078288"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:28.949457" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:28.949148" elapsed="0.000450"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:28.949116" elapsed="0.000512"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:28.950245" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:28.949830" elapsed="0.000498"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:28.950619" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:28.950391" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:28.950374" elapsed="0.000378"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:28.950787" elapsed="0.000036"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:28.953714" elapsed="0.000482"/>
</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-10-06T01:30:28.955490" elapsed="0.000507"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:28.957224" elapsed="0.000333"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:28.951657" elapsed="0.005969"/>
</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-10-06T01:30:28.951107" elapsed="0.006859"/>
</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="PASS" start="2026-10-06T01:30:28.829782" elapsed="0.128267"/>
</kw>
<msg time="2026-10-06T01:30:28.958136" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:28.958177" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:28.829081" elapsed="0.129132"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:28.958372" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:30:28.958286" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:28.958268" elapsed="0.000209"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:28.958915" elapsed="0.000030"/>
</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-10-06T01:30:28.959235" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:28.959300" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:28.828476" elapsed="0.130912"/>
</kw>
<msg time="2026-10-06T01:30:28.959499" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:28.959540" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:28.826514" elapsed="0.133063"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:28.959953" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:28.959648" elapsed="0.000355"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:28.959632" elapsed="0.000394"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:28.826355" elapsed="0.133692"/>
</iter>
<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-10-06T01:30:28.962665" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:28.962581" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:28.962563" elapsed="0.000189"/>
</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-10-06T01:30:28.963858" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:28.963774" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:28.963756" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:28.964293" level="INFO">${karaf_connection_index} = 604</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-10-06T01:30:28.964064" elapsed="0.000255"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:28.964694" 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-10-06T01:30:28.964493" elapsed="0.000258"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:29.001782" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:28.965332" elapsed="0.036623"/>
</kw>
<msg time="2026-10-06T01:30:29.002134" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:29.002176" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:28.964912" elapsed="0.037299"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:29.073722" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:29.002857" elapsed="0.071041"/>
</kw>
<msg time="2026-10-06T01:30:29.074054" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:29.074096" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.002381" elapsed="0.071750"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.074423" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:29.074202" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.074183" elapsed="0.000337"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:29.075066" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:29.074726" elapsed="0.000419"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.075440" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:29.075207" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.075191" elapsed="0.000351"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:29.075572" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:29.078029" elapsed="0.000504"/>
</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-10-06T01:30:29.079823" elapsed="0.000445"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:29.081445" elapsed="0.000331"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:29.076354" elapsed="0.005488"/>
</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-10-06T01:30:29.075861" elapsed="0.006098"/>
</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="PASS" start="2026-10-06T01:30:28.963491" elapsed="0.118546"/>
</kw>
<msg time="2026-10-06T01:30:29.082121" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:29.082161" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:28.962901" elapsed="0.119300"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:29.082360" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:29.082274" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.082256" elapsed="0.000197"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.083061" elapsed="0.000025"/>
</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-10-06T01:30:29.083368" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:29.083448" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:28.962268" elapsed="0.121268"/>
</kw>
<msg time="2026-10-06T01:30:29.083659" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:29.083719" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:28.960309" elapsed="0.123447"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.084048" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:29.083827" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.083810" elapsed="0.000310"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:28.960169" elapsed="0.123973"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:28.708672" elapsed="0.375498"/>
</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-10-06T01:30:28.703480" elapsed="0.380747"/>
</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-10-06T01:30:28.698671" elapsed="0.385612"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:28.697633" elapsed="0.386696"/>
</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-10-06T01:30:28.695108" elapsed="0.389275"/>
</kw>
<kw name="Delete Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:30:29.088589" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Delete port vx2 from bridge br01 in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:30:29.087311" elapsed="0.001315">Variable '${original_owner}' not found.</status>
</kw>
<doc>Delete port in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:30:28.693887" elapsed="0.394895">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s2-t12" name="Delete Bridge In Owner And Verify Before Fail" line="67">
<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-10-06T01:30:29.090287" elapsed="0.000239"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:30:29.090040" elapsed="0.000550"/>
</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-10-06T01:30:29.091579" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:29.091491" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.091473" elapsed="0.000168"/>
</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-10-06T01:30:29.093548" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:29.093463" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.093446" elapsed="0.000165"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:29.094565" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:29.094190" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:29.095064" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:29.094790" elapsed="0.000298"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:29.095129" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:30:29.095254" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:29.093829" elapsed="0.001448"/>
</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-10-06T01:30:29.097859" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:29.097775" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.097757" elapsed="0.000165"/>
</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-10-06T01:30:29.099085" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:29.099001" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.098984" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:29.099538" level="INFO">${karaf_connection_index} = 600</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-10-06T01:30:29.099291" elapsed="0.000272"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:29.099923" 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-10-06T01:30:29.099743" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:29.135221" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:29.100602" elapsed="0.034846"/>
</kw>
<msg time="2026-10-06T01:30:29.135631" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:29.135693" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.100101" elapsed="0.035631"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:29.224793" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:29.136418" elapsed="0.088570"/>
</kw>
<msg time="2026-10-06T01:30:29.225152" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:29.225194" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.135934" elapsed="0.089297"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.225552" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:29.225314" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.225289" elapsed="0.000362"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:29.226209" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:29.225860" elapsed="0.000437"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.226572" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:29.226359" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.226342" elapsed="0.000323"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:29.226716" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:29.229305" elapsed="0.000550"/>
</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-10-06T01:30:29.231172" elapsed="0.000525"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:29.232898" elapsed="0.000312"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:29.227570" elapsed="0.005707"/>
</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-10-06T01:30:29.227025" elapsed="0.006372"/>
</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="PASS" start="2026-10-06T01:30:29.098741" elapsed="0.134751"/>
</kw>
<msg time="2026-10-06T01:30:29.233579" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:29.233619" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.098070" elapsed="0.135584"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:29.234010" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:30:29.233923" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.233905" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:30:29.234429" elapsed="0.000024"/>
</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-10-06T01:30:29.234751" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:29.234816" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:30:29.097468" elapsed="0.137434"/>
</kw>
<msg time="2026-10-06T01:30:29.234989" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:29.235078" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.095628" elapsed="0.139488"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.235435" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:29.235188" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.235172" elapsed="0.000344"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:29.095488" elapsed="0.140051"/>
</iter>
<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-10-06T01:30:29.238224" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:29.238138" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.238121" elapsed="0.000166"/>
</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-10-06T01:30:29.239485" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:29.239375" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.239359" elapsed="0.000190"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:29.239944" level="INFO">${karaf_connection_index} = 602</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-10-06T01:30:29.239715" elapsed="0.000255"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:29.240313" 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-10-06T01:30:29.240130" elapsed="0.000207"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:29.279122" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:29.241002" elapsed="0.038312"/>
</kw>
<msg time="2026-10-06T01:30:29.279489" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:29.279531" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.240568" elapsed="0.038998"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:29.360883" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:29.280180" elapsed="0.080917"/>
</kw>
<msg time="2026-10-06T01:30:29.361277" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:29.361320" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.279755" elapsed="0.081602"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.361745" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:29.361476" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.361450" elapsed="0.000397"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:29.362425" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:29.362033" elapsed="0.000481"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.362799" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:29.362577" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.362560" elapsed="0.000334"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:29.362927" elapsed="0.000030"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:29.365502" elapsed="0.000501"/>
</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-10-06T01:30:29.367243" elapsed="0.000509"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:29.369136" elapsed="0.000327"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:29.363787" elapsed="0.005797"/>
</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-10-06T01:30:29.363227" elapsed="0.006493"/>
</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="PASS" start="2026-10-06T01:30:29.239118" elapsed="0.130681"/>
</kw>
<msg time="2026-10-06T01:30:29.369882" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:29.369923" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.238463" elapsed="0.131496"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:29.370116" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:30:29.370029" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.370012" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.370543" elapsed="0.000024"/>
</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-10-06T01:30:29.370941" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:29.371006" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:29.237839" elapsed="0.133254"/>
</kw>
<msg time="2026-10-06T01:30:29.371180" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:29.371221" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.235919" elapsed="0.135337"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.371560" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:29.371325" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.371309" elapsed="0.000322"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:29.235660" elapsed="0.135993"/>
</iter>
<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-10-06T01:30:29.375795" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:29.375705" elapsed="0.000133"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.375686" elapsed="0.000173"/>
</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-10-06T01:30:29.376983" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:29.376893" elapsed="0.000132"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.376876" elapsed="0.000170"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:29.377438" level="INFO">${karaf_connection_index} = 604</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-10-06T01:30:29.377189" elapsed="0.000276"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:29.377834" 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-10-06T01:30:29.377626" elapsed="0.000232"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:29.416594" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:29.378448" elapsed="0.038358"/>
</kw>
<msg time="2026-10-06T01:30:29.416963" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:29.417005" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.378017" elapsed="0.039023"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:29.500854" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:29.417644" elapsed="0.083394"/>
</kw>
<msg time="2026-10-06T01:30:29.501197" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:29.501238" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.417204" elapsed="0.084103"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.501599" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:29.501380" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.501361" elapsed="0.000369"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:29.502263" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "B "e "f "o "r "e "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:29.501922" elapsed="0.000425"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.502626" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:29.502427" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.502391" elapsed="0.000349"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:29.502771" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:29.505257" elapsed="0.000521"/>
</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-10-06T01:30:29.506996" elapsed="0.000465"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:29.508627" elapsed="0.000528"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:29.503549" elapsed="0.005673"/>
</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-10-06T01:30:29.503040" elapsed="0.006295"/>
</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="PASS" start="2026-10-06T01:30:29.376609" elapsed="0.132817"/>
</kw>
<msg time="2026-10-06T01:30:29.509511" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:29.509551" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.376009" elapsed="0.133578"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:29.509761" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:30:29.509657" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.509640" elapsed="0.000199"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.510153" elapsed="0.000025"/>
</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-10-06T01:30:29.510476" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:29.510542" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:29.375368" elapsed="0.135260"/>
</kw>
<msg time="2026-10-06T01:30:29.510806" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:29.510849" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.371930" elapsed="0.138954"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.511172" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:29.510955" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.510938" elapsed="0.000304"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:29.371790" elapsed="0.139473"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:29.095329" elapsed="0.415961"/>
</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-10-06T01:30:29.093151" elapsed="0.418193"/>
</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-10-06T01:30:29.091209" elapsed="0.420184"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.090795" elapsed="0.420658"/>
</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-10-06T01:30:29.089697" elapsed="0.421838"/>
</kw>
<kw name="Delete Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:30:29.515648" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Delete bridge br01 in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:30:29.514352" elapsed="0.001346">Variable '${original_owner}' not found.</status>
</kw>
<doc>Delete bridge in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:30:29.089130" elapsed="0.426712">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s2-t13" name="Kill Candidate Instance" line="71">
<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-10-06T01:30:29.517119" elapsed="0.000200"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:30:29.516848" elapsed="0.000521"/>
</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-10-06T01:30:29.518282" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:29.518197" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.518179" elapsed="0.000167"/>
</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-10-06T01:30:29.520239" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:29.520156" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.520140" elapsed="0.000161"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:29.521226" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:29.520899" elapsed="0.000354"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:29.521705" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:29.521416" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:29.521770" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:30:29.521896" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:29.520519" elapsed="0.001400"/>
</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-10-06T01:30:29.524580" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:29.524490" elapsed="0.000134"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.524473" elapsed="0.000172"/>
</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-10-06T01:30:29.525790" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:29.525703" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.525662" elapsed="0.000190"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:29.526233" level="INFO">${karaf_connection_index} = 600</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-10-06T01:30:29.525997" elapsed="0.000261"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:29.526656" 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-10-06T01:30:29.526465" elapsed="0.000232"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:29.564917" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:29.527267" elapsed="0.037835"/>
</kw>
<msg time="2026-10-06T01:30:29.565265" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:29.565307" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.526854" elapsed="0.038489"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:29.625247" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "K "i "l "l "[C "C "a "n "d "i "d "a "t "e "[C "I "n "s "t "[78Ca "[A[78Cn
 "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:29.565979" elapsed="0.059477"/>
</kw>
<msg time="2026-10-06T01:30:29.625619" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:29.625660" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.565524" elapsed="0.060196"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.626053" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:29.625843" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.625824" elapsed="0.000326"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:29.626760" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "K "i "l "l "[C "C "a "n "d "i "d "a "t "e "[C "I "n "s "t "[78Ca "[A[78Cn
 "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:29.626330" elapsed="0.000509"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.627107" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:29.626902" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.626885" elapsed="0.000316"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:29.627232" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:29.629778" elapsed="0.000478"/>
</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-10-06T01:30:29.631501" elapsed="0.000490"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:29.633241" elapsed="0.000323"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:29.628069" elapsed="0.005563"/>
</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-10-06T01:30:29.627543" elapsed="0.006388"/>
</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="PASS" start="2026-10-06T01:30:29.525421" elapsed="0.108590"/>
</kw>
<msg time="2026-10-06T01:30:29.634094" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:29.634133" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.524810" elapsed="0.109358"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:29.634323" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:30:29.634238" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.634220" elapsed="0.000200"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:30:29.634762" elapsed="0.000024"/>
</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-10-06T01:30:29.635062" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:29.635127" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:29.524172" elapsed="0.111041"/>
</kw>
<msg time="2026-10-06T01:30:29.635296" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:29.635336" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.522255" elapsed="0.113119"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.635805" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:29.635457" elapsed="0.000401"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.635441" elapsed="0.000439"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:29.522113" elapsed="0.113789"/>
</iter>
<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-10-06T01:30:29.638468" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:29.638350" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.638333" elapsed="0.000214"/>
</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-10-06T01:30:29.639774" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:29.639665" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.639648" elapsed="0.000189"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:29.640211" level="INFO">${karaf_connection_index} = 602</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-10-06T01:30:29.639985" elapsed="0.000251"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:29.640648" 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-10-06T01:30:29.640461" elapsed="0.000228"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:29.674272" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:29.641261" elapsed="0.033217"/>
</kw>
<msg time="2026-10-06T01:30:29.674637" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:29.674700" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.640846" elapsed="0.033891"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:29.728981" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "K "i "l "l "[C "C "a "n "d "i "d "a "t "e "[C "I "n "s "t "[78Ca "[A[78Cn
 "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:29.675325" elapsed="0.053832"/>
</kw>
<msg time="2026-10-06T01:30:29.729317" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:29.729359" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.674903" elapsed="0.054505"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.729705" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:29.729480" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.729463" elapsed="0.000339"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:29.730358" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "K "i "l "l "[C "C "a "n "d "i "d "a "t "e "[C "I "n "s "t "[78Ca "[A[78Cn
 "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:29.730007" elapsed="0.000451"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.730751" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:29.730524" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.730507" elapsed="0.000339"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:29.730877" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:29.733457" elapsed="0.000523"/>
</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-10-06T01:30:29.735282" elapsed="0.000532"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:29.737176" elapsed="0.000325"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:29.731731" elapsed="0.005837"/>
</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-10-06T01:30:29.731174" elapsed="0.006529"/>
</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="PASS" start="2026-10-06T01:30:29.639355" elapsed="0.098428"/>
</kw>
<msg time="2026-10-06T01:30:29.737871" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:29.737911" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.638754" elapsed="0.099192"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:29.738103" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:30:29.738017" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.738000" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.738570" elapsed="0.000024"/>
</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-10-06T01:30:29.738974" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:29.739087" 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="PASS" start="2026-10-06T01:30:29.638058" elapsed="0.101122"/>
</kw>
<msg time="2026-10-06T01:30:29.739266" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:29.739306" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.636155" elapsed="0.103186"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.739667" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:29.739432" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.739412" elapsed="0.000345"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:29.636018" elapsed="0.103761"/>
</iter>
<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-10-06T01:30:29.742411" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:29.742310" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.742292" elapsed="0.000193"/>
</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-10-06T01:30:29.743660" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:29.743549" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.743528" elapsed="0.000238"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:29.744181" level="INFO">${karaf_connection_index} = 604</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-10-06T01:30:29.743942" elapsed="0.000264"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:29.744574" 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-10-06T01:30:29.744368" elapsed="0.000230"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:29.794438" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:29.745188" elapsed="0.049433"/>
</kw>
<msg time="2026-10-06T01:30:29.794801" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:29.794844" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.744771" elapsed="0.050108"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:29.857490" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "K "i "l "l "[C "C "a "n "d "i "d "a "t "e "[C "I "n "s "t "[78Ca "[A[78Cn
 "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:29.795488" elapsed="0.062175"/>
</kw>
<msg time="2026-10-06T01:30:29.857845" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:29.857886" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.795045" elapsed="0.062878"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.858199" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:29.857993" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.857974" elapsed="0.000318"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:29.858853" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "K "i "l "l "[C "C "a "n "d "i "d "a "t "e "[C "I "n "s "t "[78Ca "[A[78Cn
 "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:29.858487" elapsed="0.000445"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.859192" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:29.858994" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.858977" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:29.859315" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:29.861797" elapsed="0.000572"/>
</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-10-06T01:30:29.863658" elapsed="0.000481"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:29.865521" elapsed="0.000330"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:29.860125" elapsed="0.005794"/>
</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-10-06T01:30:29.859603" elapsed="0.006434"/>
</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="PASS" start="2026-10-06T01:30:29.743241" elapsed="0.122872"/>
</kw>
<msg time="2026-10-06T01:30:29.866196" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:29.866236" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.742631" elapsed="0.123641"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:29.866442" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:29.866341" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.866324" elapsed="0.000196"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.866920" elapsed="0.000024"/>
</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-10-06T01:30:29.867227" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:29.867293" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:29.742013" elapsed="0.125366"/>
</kw>
<msg time="2026-10-06T01:30:29.867507" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:29.867548" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.740044" elapsed="0.127540"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.867890" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:29.867652" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.867636" elapsed="0.000326"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:29.739900" elapsed="0.128084"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:29.521969" elapsed="0.346042"/>
</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-10-06T01:30:29.519863" elapsed="0.348205"/>
</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-10-06T01:30:29.517941" elapsed="0.350182"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.517534" elapsed="0.350633"/>
</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-10-06T01:30:29.516486" elapsed="0.351732"/>
</kw>
<kw name="Kill_Single_Member" owner="ClusterManagement">
<msg time="2026-10-06T01:30:29.870053" level="FAIL">Variable '${original_candidate}' not found.</msg>
<var>${new_cluster_list}</var>
<arg>${original_candidate}</arg>
<doc>Convenience keyword that kills the specified member of the cluster.
The KW will return a list of available members: ${updated index_list}=${original_index_list}-${member}</doc>
<status status="FAIL" start="2026-10-06T01:30:29.868469" elapsed="0.001621">Variable '${original_candidate}' not found.</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_cluster_list}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.870286" elapsed="0.000021"/>
</kw>
<doc>Kill Owner Instance and verify it is dead</doc>
<status status="FAIL" start="2026-10-06T01:30:29.516052" elapsed="0.354404">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s2-s2-t14" name="Check Shards Status After Fail" line="76">
<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-10-06T01:30:29.871929" elapsed="0.000200"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:30:29.871622" elapsed="0.000557"/>
</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-10-06T01:30:29.873089" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:29.873004" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.872986" elapsed="0.000166"/>
</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-10-06T01:30:29.875038" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:29.874955" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.874939" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:29.876061" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:29.875732" elapsed="0.000355"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:29.876569" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:29.876238" elapsed="0.000356"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:29.876634" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:30:29.876778" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:29.875340" elapsed="0.001461"/>
</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-10-06T01:30:29.879336" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:29.879252" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.879234" elapsed="0.000187"/>
</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-10-06T01:30:29.880525" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:29.880440" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.880422" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:29.880978" level="INFO">${karaf_connection_index} = 600</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-10-06T01:30:29.880753" elapsed="0.000250"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:29.881341" 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-10-06T01:30:29.881164" elapsed="0.000201"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:29.915121" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:29.881969" elapsed="0.033329"/>
</kw>
<msg time="2026-10-06T01:30:29.915475" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:29.915516" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.881538" elapsed="0.034014"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:29.974465" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CA
 "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:29.916157" elapsed="0.058553"/>
</kw>
<msg time="2026-10-06T01:30:29.974897" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:29.974939" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.915734" elapsed="0.059241"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.975309" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:29.975059" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.975035" elapsed="0.000395"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:29.976019" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CA
 "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:29.975616" elapsed="0.000485"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.976362" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:29.976162" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.976145" elapsed="0.000327"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:29.976505" elapsed="0.000031"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:29.979110" elapsed="0.000508"/>
</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-10-06T01:30:29.980948" elapsed="0.000485"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:29.982634" elapsed="0.000358"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:29.977357" elapsed="0.005703"/>
</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-10-06T01:30:29.976836" elapsed="0.006343"/>
</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="PASS" start="2026-10-06T01:30:29.880164" elapsed="0.103094"/>
</kw>
<msg time="2026-10-06T01:30:29.983344" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:29.983384" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.879569" elapsed="0.103874"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:29.983601" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:29.983515" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.983497" elapsed="0.000393"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:30:29.984223" elapsed="0.000024"/>
</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-10-06T01:30:29.984544" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:29.984609" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:30:29.878959" elapsed="0.105755"/>
</kw>
<msg time="2026-10-06T01:30:29.984802" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:29.984842" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.877132" elapsed="0.107745"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:29.985167" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:29.984949" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.984931" elapsed="0.000307"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:29.876994" elapsed="0.108265"/>
</iter>
<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-10-06T01:30:29.987939" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:29.987853" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.987836" elapsed="0.000165"/>
</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-10-06T01:30:29.989125" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:29.989041" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:29.989024" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:29.989574" level="INFO">${karaf_connection_index} = 602</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-10-06T01:30:29.989331" elapsed="0.000268"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:29.989960" 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-10-06T01:30:29.989778" elapsed="0.000207"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:30.023965" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:29.990562" elapsed="0.033598"/>
</kw>
<msg time="2026-10-06T01:30:30.024318" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:30.024360" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.990138" elapsed="0.034272"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:30.085939" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CA
 "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:30.025026" elapsed="0.061092"/>
</kw>
<msg time="2026-10-06T01:30:30.086309" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:30.086352" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.024576" elapsed="0.061826"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.086704" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:30.086475" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.086456" elapsed="0.000343"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:30.087312" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CA
 "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:30.086980" elapsed="0.000425"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.087666" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:30.087468" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.087452" elapsed="0.000325"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:30.087808" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:30.090219" elapsed="0.000511"/>
</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-10-06T01:30:30.091928" elapsed="0.000444"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:30.093726" elapsed="0.000308"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:30.088579" elapsed="0.005521"/>
</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-10-06T01:30:30.088077" elapsed="0.006137"/>
</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="PASS" start="2026-10-06T01:30:29.988780" elapsed="0.105510"/>
</kw>
<msg time="2026-10-06T01:30:30.094372" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:30.094426" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.988148" elapsed="0.106314"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:30.094617" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:30.094532" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.094515" elapsed="0.000260"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.095089" elapsed="0.000024"/>
</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-10-06T01:30:30.095402" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:30.095469" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:29.987544" elapsed="0.108011"/>
</kw>
<msg time="2026-10-06T01:30:30.095639" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:30.095696" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.985530" elapsed="0.110203"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.096021" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:30.095803" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.095787" elapsed="0.000305"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:29.985376" elapsed="0.110737"/>
</iter>
<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-10-06T01:30:30.098729" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:30.098629" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.098611" elapsed="0.000181"/>
</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-10-06T01:30:30.099925" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:30.099840" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.099823" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:30.100353" level="INFO">${karaf_connection_index} = 604</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-10-06T01:30:30.100130" elapsed="0.000248"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:30.100752" 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-10-06T01:30:30.100556" elapsed="0.000220"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:30.139269" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:30.101342" elapsed="0.038121"/>
</kw>
<msg time="2026-10-06T01:30:30.139621" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:30.139662" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.100930" elapsed="0.038793"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:30.208328" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CA
 "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:30.140310" elapsed="0.068264"/>
</kw>
<msg time="2026-10-06T01:30:30.208787" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:30.208830" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.139888" elapsed="0.068978"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.209182" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:30.208948" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.208926" elapsed="0.000353"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:30.209898" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CA
 "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:30.209507" elapsed="0.000479"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.210246" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:30.210048" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.210031" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:30.210370" elapsed="0.000049"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:30.212974" elapsed="0.000504"/>
</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-10-06T01:30:30.214773" elapsed="0.000454"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:30.216629" elapsed="0.000322"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:30.211243" elapsed="0.005774"/>
</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-10-06T01:30:30.210731" elapsed="0.006402"/>
</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="PASS" start="2026-10-06T01:30:30.099523" elapsed="0.117687"/>
</kw>
<msg time="2026-10-06T01:30:30.217295" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:30.217335" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.098938" elapsed="0.118432"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:30.217575" elapsed="0.000032"/>
</return>
<status status="PASS" start="2026-10-06T01:30:30.217470" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.217448" elapsed="0.000300"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.218076" elapsed="0.000024"/>
</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-10-06T01:30:30.218450" elapsed="0.000030"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:30.218532" elapsed="0.000018"/>
</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="PASS" start="2026-10-06T01:30:30.098323" elapsed="0.120302"/>
</kw>
<msg time="2026-10-06T01:30:30.218729" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:30.218771" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.096359" elapsed="0.122448"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.219099" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:30.218878" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.218862" elapsed="0.000309"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:30.096220" elapsed="0.122973"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:29.876851" elapsed="0.342372"/>
</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-10-06T01:30:29.874647" elapsed="0.344632"/>
</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-10-06T01:30:29.872747" elapsed="0.346587"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:29.872322" elapsed="0.347054"/>
</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-10-06T01:30:29.871264" elapsed="0.348195"/>
</kw>
<kw name="Check Ovsdb Shards Status After Cluster Event" owner="ClusterOvsdb">
<msg time="2026-10-06T01:30:30.221307" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>${new_cluster_list}</arg>
<doc>Check Shard Status after some cluster event.</doc>
<status status="FAIL" start="2026-10-06T01:30:30.219787" elapsed="0.001556">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Create original cluster list and check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:29.870781" elapsed="0.350744">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s2-s2-t15" name="Check Entity Owner Status And Find Owner and Candidate After Fail" line="80">
<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-10-06T01:30:30.223129" elapsed="0.000198"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:30:30.222883" elapsed="0.000494"/>
</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-10-06T01:30:30.224322" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:30.224236" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.224219" elapsed="0.000166"/>
</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-10-06T01:30:30.226412" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:30.226311" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.226294" elapsed="0.000200"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:30.227448" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:30.227096" elapsed="0.000381"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:30.227919" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:30.227629" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:30.227984" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:30:30.228109" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:30.226737" elapsed="0.001395"/>
</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-10-06T01:30:30.230795" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:30.230706" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.230668" elapsed="0.000190"/>
</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-10-06T01:30:30.232023" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:30.231938" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.231921" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:30.232490" level="INFO">${karaf_connection_index} = 600</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-10-06T01:30:30.232229" elapsed="0.000333"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:30.232942" 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-10-06T01:30:30.232754" elapsed="0.000213"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:30.266943" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:30.233613" elapsed="0.033523"/>
</kw>
<msg time="2026-10-06T01:30:30.267295" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:30.267337" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.233121" elapsed="0.034252"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:30.376596" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:30.268039" elapsed="0.108804"/>
</kw>
<msg time="2026-10-06T01:30:30.377025" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:30.377066" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.267588" elapsed="0.109515"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.377437" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:30.377185" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.377162" elapsed="0.000373"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:30.378105" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:30.377734" elapsed="0.000466"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.378497" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:30.378261" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.378245" elapsed="0.000367"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:30.378652" elapsed="0.000063"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:30.381269" elapsed="0.000526"/>
</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-10-06T01:30:30.383034" elapsed="0.000479"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:30.384871" elapsed="0.000313"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:30.379534" elapsed="0.005715"/>
</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-10-06T01:30:30.378989" elapsed="0.006378"/>
</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="PASS" start="2026-10-06T01:30:30.231639" elapsed="0.153819"/>
</kw>
<msg time="2026-10-06T01:30:30.385541" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:30.385581" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.231004" elapsed="0.154613"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:30.385828" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:30.385740" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.385669" elapsed="0.000237"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:30:30.386233" elapsed="0.000024"/>
</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-10-06T01:30:30.386659" elapsed="0.000038"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:30.386742" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:30.230327" elapsed="0.156504"/>
</kw>
<msg time="2026-10-06T01:30:30.386917" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:30.386959" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.228511" elapsed="0.158484"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.387291" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:30.387071" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.387055" elapsed="0.000309"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:30.228326" elapsed="0.159072"/>
</iter>
<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-10-06T01:30:30.390096" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:30.390012" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.389994" elapsed="0.000164"/>
</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-10-06T01:30:30.391270" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:30.391186" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.391169" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:30.391743" level="INFO">${karaf_connection_index} = 602</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-10-06T01:30:30.391491" elapsed="0.000277"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:30.392116" 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-10-06T01:30:30.391931" elapsed="0.000209"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:30.433181" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:30.392739" elapsed="0.040640"/>
</kw>
<msg time="2026-10-06T01:30:30.433560" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:30.433601" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.392292" elapsed="0.041344"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:30.536570" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:30.434247" elapsed="0.102549"/>
</kw>
<msg time="2026-10-06T01:30:30.536958" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:30.537000" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.433826" elapsed="0.103209"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.537322" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:30.537110" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.537090" elapsed="0.000351"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:30.538059" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:30.537711" elapsed="0.000440"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.538432" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:30.538212" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.538195" elapsed="0.000357"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:30.538640" elapsed="0.000050"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:30.541193" elapsed="0.000568"/>
</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-10-06T01:30:30.543019" elapsed="0.000484"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:30.544707" elapsed="0.000308"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:30.539477" elapsed="0.005604"/>
</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-10-06T01:30:30.538946" elapsed="0.006250"/>
</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="PASS" start="2026-10-06T01:30:30.390929" elapsed="0.154344"/>
</kw>
<msg time="2026-10-06T01:30:30.545356" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:30.545412" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.390305" elapsed="0.155157"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:30.545662" elapsed="0.000063"/>
</return>
<status status="PASS" start="2026-10-06T01:30:30.545554" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.545530" elapsed="0.000255"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.546098" elapsed="0.000024"/>
</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-10-06T01:30:30.546415" elapsed="0.000038"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:30.546507" elapsed="0.000019"/>
</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="PASS" start="2026-10-06T01:30:30.389715" elapsed="0.156902"/>
</kw>
<msg time="2026-10-06T01:30:30.546853" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:30.546897" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.387670" elapsed="0.159263"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.547224" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:30.547003" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.546987" elapsed="0.000308"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:30.387528" elapsed="0.159788"/>
</iter>
<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-10-06T01:30:30.551734" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:30.551609" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.551586" elapsed="0.000219"/>
</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-10-06T01:30:30.552972" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:30.552888" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.552871" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:30.553419" level="INFO">${karaf_connection_index} = 604</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-10-06T01:30:30.553177" elapsed="0.000272"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:30.553896" 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-10-06T01:30:30.553657" elapsed="0.000264"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:30.590989" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:30.554534" elapsed="0.036660"/>
</kw>
<msg time="2026-10-06T01:30:30.591378" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:30.591447" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.554077" elapsed="0.037417"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:30.696189" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:30.592255" elapsed="0.104139"/>
</kw>
<msg time="2026-10-06T01:30:30.696555" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:30.696597" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.591777" elapsed="0.104855"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.696959" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:30.696737" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.696709" elapsed="0.000348"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:30.697608" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "n "d "[C "F "i "n "d "[C "O "w "n "e "r "[C "a "n "d "[C "C "a "n "d "i "d "a "t "e "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:30.697237" elapsed="0.000485"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.697983" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:30.697785" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.697768" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:30.698110" elapsed="0.000034"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:30.700655" elapsed="0.000496"/>
</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-10-06T01:30:30.702400" elapsed="0.000479"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:30.704057" elapsed="0.000308"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:30.698963" elapsed="0.005498"/>
</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-10-06T01:30:30.698432" elapsed="0.006173"/>
</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="PASS" start="2026-10-06T01:30:30.552583" elapsed="0.152436"/>
</kw>
<msg time="2026-10-06T01:30:30.705114" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:30.705155" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.551953" elapsed="0.153239"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:30.705347" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:30.705262" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.705245" elapsed="0.000205"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.705801" elapsed="0.000024"/>
</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-10-06T01:30:30.706110" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:30.706175" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:30:30.551252" elapsed="0.155008"/>
</kw>
<msg time="2026-10-06T01:30:30.706348" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:30.706404" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.547635" elapsed="0.158807"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.706799" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:30.706512" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.706496" elapsed="0.000411"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:30.547454" elapsed="0.159478"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:30.228183" elapsed="0.478782"/>
</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-10-06T01:30:30.226018" elapsed="0.481004"/>
</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-10-06T01:30:30.223981" elapsed="0.483094"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.223576" elapsed="0.483542"/>
</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-10-06T01:30:30.222514" elapsed="0.484655"/>
</kw>
<kw name="Get Ovsdb Entity Owner Status For One Device" owner="ClusterOvsdb">
<msg time="2026-10-06T01:30:30.711172" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<var>${new_owner}</var>
<var>${new_candidate_list}</var>
<arg>ovsdb://uuid/${ovsdb_uuid}</arg>
<arg>${original_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Check Entity Owner Status and identify owner and successors for an ovs device ${device}. Request is sent to controller ${controller_index}.</doc>
<status status="FAIL" start="2026-10-06T01:30:30.709949" elapsed="0.001259">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Get From List" owner="Collections">
<var>${new_candidate}</var>
<arg>${new_candidate_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an `index` from `list`.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.711404" elapsed="0.000025"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_owner}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.711615" elapsed="0.000019"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_candidate}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.711833" elapsed="0.000019"/>
</kw>
<doc>Check Entity Owner Status and identify owner and candidate.</doc>
<status status="FAIL" start="2026-10-06T01:30:30.221906" elapsed="0.490081">Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s2-s2-t16" name="Create Bridge Manually and Verify After Fail" line="90">
<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-10-06T01:30:30.713557" elapsed="0.000219"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:30:30.713283" elapsed="0.000542"/>
</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-10-06T01:30:30.714742" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:30.714638" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.714621" elapsed="0.000183"/>
</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-10-06T01:30:30.716693" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:30.716595" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.716579" elapsed="0.000177"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:30.717698" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:30.717325" elapsed="0.000400"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:30.718147" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:30.717877" elapsed="0.000294"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:30.718211" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:30:30.718337" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:30.716961" elapsed="0.001399"/>
</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-10-06T01:30:30.720949" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:30.720864" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.720846" elapsed="0.000167"/>
</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-10-06T01:30:30.722126" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:30.722041" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.722023" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:30.722576" level="INFO">${karaf_connection_index} = 600</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-10-06T01:30:30.722333" elapsed="0.000267"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:30.722967" 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-10-06T01:30:30.722781" elapsed="0.000210"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:30.759609" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:30.723598" elapsed="0.036243"/>
</kw>
<msg time="2026-10-06T01:30:30.760005" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:30.760047" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.723145" elapsed="0.036937"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:30.838732" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:30.760732" elapsed="0.078254"/>
</kw>
<msg time="2026-10-06T01:30:30.839185" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:30.839229" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.760249" elapsed="0.079016"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.839650" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:30.839361" elapsed="0.000395"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.839333" elapsed="0.000449"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:30.840399" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:30.839970" elapsed="0.000521"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.840773" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:30.840554" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.840536" elapsed="0.000335"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:30.840905" elapsed="0.000035"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:30.843500" elapsed="0.000501"/>
</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-10-06T01:30:30.845240" elapsed="0.000525"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:30.846938" elapsed="0.000314"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:30.841794" elapsed="0.005527"/>
</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-10-06T01:30:30.841229" elapsed="0.006226"/>
</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="PASS" start="2026-10-06T01:30:30.721775" elapsed="0.125759"/>
</kw>
<msg time="2026-10-06T01:30:30.847622" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:30.847663" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.721160" elapsed="0.126555"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:30.847877" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:30.847789" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.847771" elapsed="0.000184"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:30:30.848291" elapsed="0.000023"/>
</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-10-06T01:30:30.848615" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:30.848696" 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="PASS" start="2026-10-06T01:30:30.720558" elapsed="0.128229"/>
</kw>
<msg time="2026-10-06T01:30:30.848876" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:30.848916" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.718744" elapsed="0.130210"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.849297" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:30.849075" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.849057" elapsed="0.000313"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:30.718588" elapsed="0.130820"/>
</iter>
<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-10-06T01:30:30.852253" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:30.852167" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.852150" elapsed="0.000167"/>
</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-10-06T01:30:30.853442" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:30.853334" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.853317" elapsed="0.000189"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:30.853911" level="INFO">${karaf_connection_index} = 602</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-10-06T01:30:30.853651" elapsed="0.000285"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:30.854286" 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-10-06T01:30:30.854099" elapsed="0.000210"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:30.888835" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:30.855015" elapsed="0.034000"/>
</kw>
<msg time="2026-10-06T01:30:30.889174" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:30.889216" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.854484" elapsed="0.034767"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:30.965648" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:30.889894" elapsed="0.075959"/>
</kw>
<msg time="2026-10-06T01:30:30.966012" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:30.966054" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.889432" elapsed="0.076657"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.966368" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:30.966161" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.966142" elapsed="0.000341"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:30.967036" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:30.966666" elapsed="0.000456"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.967403" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:30.967183" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.967167" elapsed="0.000331"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:30.967528" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:30.969976" elapsed="0.000492"/>
</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-10-06T01:30:30.971725" elapsed="0.000455"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:30.973355" elapsed="0.000343"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:30.968306" elapsed="0.005460"/>
</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-10-06T01:30:30.967813" elapsed="0.006104"/>
</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="PASS" start="2026-10-06T01:30:30.853075" elapsed="0.120921"/>
</kw>
<msg time="2026-10-06T01:30:30.974078" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:30.974117" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.852479" elapsed="0.121674"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:30.974308" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:30:30.974223" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.974205" elapsed="0.000195"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.974740" elapsed="0.000024"/>
</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-10-06T01:30:30.975043" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:30.975107" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:30:30.851866" elapsed="0.123326"/>
</kw>
<msg time="2026-10-06T01:30:30.975276" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:30.975316" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.849698" elapsed="0.125653"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:30.975652" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:30.975434" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.975418" elapsed="0.000346"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:30.849533" elapsed="0.126252"/>
</iter>
<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-10-06T01:30:30.978444" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:30.978335" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.978317" elapsed="0.000194"/>
</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-10-06T01:30:30.979934" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:30.979603" elapsed="0.000375"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:30.979586" elapsed="0.000413"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:30.980442" level="INFO">${karaf_connection_index} = 604</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-10-06T01:30:30.980145" elapsed="0.000325"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:30.980841" 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-10-06T01:30:30.980635" elapsed="0.000231"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:31.019175" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:30.981450" elapsed="0.037900"/>
</kw>
<msg time="2026-10-06T01:30:31.019542" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:31.019584" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.981022" elapsed="0.038597"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:31.114617" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:31.020232" elapsed="0.094609"/>
</kw>
<msg time="2026-10-06T01:30:31.115010" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:31.115051" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.019805" elapsed="0.095282"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.115467" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:31.115227" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.115206" elapsed="0.000359"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:31.116136" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:31.115775" elapsed="0.000446"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.116497" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:31.116282" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.116266" elapsed="0.000326"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:31.116623" elapsed="0.000036"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:31.119163" elapsed="0.000544"/>
</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-10-06T01:30:31.120953" elapsed="0.000493"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:31.122646" elapsed="0.000334"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:31.117473" elapsed="0.005574"/>
</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-10-06T01:30:31.116948" elapsed="0.006217"/>
</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="PASS" start="2026-10-06T01:30:30.979325" elapsed="0.143918"/>
</kw>
<msg time="2026-10-06T01:30:31.123327" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:31.123367" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.978704" elapsed="0.144713"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:31.123574" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:31.123489" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.123471" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.124019" elapsed="0.000023"/>
</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-10-06T01:30:31.124327" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:31.124407" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:30.978034" elapsed="0.146461"/>
</kw>
<msg time="2026-10-06T01:30:31.124582" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:31.124623" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.976031" elapsed="0.148629"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.125086" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:31.124862" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.124845" elapsed="0.000313"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:30.975893" elapsed="0.149287"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:30.718435" elapsed="0.406779"/>
</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-10-06T01:30:30.716289" elapsed="0.408982"/>
</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-10-06T01:30:30.714363" elapsed="0.410965"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:30.713974" elapsed="0.411399"/>
</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-10-06T01:30:30.712942" elapsed="0.412560"/>
</kw>
<kw name="Create Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:30:31.128513" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Create bridge br-s1 using OVS command and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:30:31.127193" elapsed="0.001356">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Create bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:30:30.712333" elapsed="0.416562">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s2-s2-t17" name="Add Port Manually and Verify After Fail" line="94">
<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-10-06T01:30:31.130419" elapsed="0.000205"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:30:31.130139" elapsed="0.000551"/>
</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-10-06T01:30:31.131630" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:31.131542" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.131524" elapsed="0.000187"/>
</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-10-06T01:30:31.133607" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:31.133523" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.133506" elapsed="0.000164"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:31.134607" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:31.134257" elapsed="0.000376"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:31.135079" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:31.134803" elapsed="0.000301"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:31.135145" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:30:31.135271" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:31.133891" elapsed="0.001403"/>
</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-10-06T01:30:31.137952" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:31.137866" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.137848" elapsed="0.000168"/>
</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-10-06T01:30:31.139139" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:31.139055" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.139038" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:31.139591" level="INFO">${karaf_connection_index} = 600</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-10-06T01:30:31.139344" elapsed="0.000272"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:31.139984" 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-10-06T01:30:31.139796" elapsed="0.000214"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:31.173843" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:31.140595" elapsed="0.033423"/>
</kw>
<msg time="2026-10-06T01:30:31.174178" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:31.174219" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.140167" elapsed="0.034088"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:31.245445" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:31.174898" elapsed="0.070978"/>
</kw>
<msg time="2026-10-06T01:30:31.246204" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:31.246267" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.174451" elapsed="0.071867"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.246981" elapsed="0.000120"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:31.246511" elapsed="0.000667"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.246454" elapsed="0.000766"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:31.248205" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:31.247503" elapsed="0.000832"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.248759" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:31.248441" elapsed="0.000419"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.248416" elapsed="0.000477"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:31.248945" elapsed="0.000055"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:31.252662" elapsed="0.000506"/>
</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-10-06T01:30:31.254520" elapsed="0.000525"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:31.256347" elapsed="0.000346"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:31.250245" elapsed="0.006520"/>
</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-10-06T01:30:31.249437" elapsed="0.007450"/>
</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="PASS" start="2026-10-06T01:30:31.138795" elapsed="0.118175"/>
</kw>
<msg time="2026-10-06T01:30:31.257061" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:31.257102" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.138167" elapsed="0.118972"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:31.257301" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:31.257212" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.257195" elapsed="0.000197"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:30:31.257914" elapsed="0.000026"/>
</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-10-06T01:30:31.258238" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:31.258303" 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="PASS" start="2026-10-06T01:30:31.137551" elapsed="0.120857"/>
</kw>
<msg time="2026-10-06T01:30:31.258503" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:31.258546" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.135652" elapsed="0.122934"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.258901" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:31.258660" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.258644" elapsed="0.000330"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:31.135511" elapsed="0.123487"/>
</iter>
<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-10-06T01:30:31.261992" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:31.261906" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.261888" elapsed="0.000167"/>
</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-10-06T01:30:31.263177" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:31.263093" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.263076" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:31.263642" level="INFO">${karaf_connection_index} = 602</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-10-06T01:30:31.263403" elapsed="0.000264"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:31.264129" 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-10-06T01:30:31.263934" elapsed="0.000220"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:31.297508" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:31.264787" elapsed="0.032917"/>
</kw>
<msg time="2026-10-06T01:30:31.297865" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:31.297908" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.264310" elapsed="0.033634"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:31.366892" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:31.298553" elapsed="0.068519"/>
</kw>
<msg time="2026-10-06T01:30:31.367231" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:31.367272" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.298108" elapsed="0.069200"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.367597" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:31.367392" elapsed="0.000277"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.367361" elapsed="0.000357"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:31.368236" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:31.367900" elapsed="0.000419"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.368596" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:31.368397" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.368365" elapsed="0.000346"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:31.368743" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:31.371226" elapsed="0.000521"/>
</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-10-06T01:30:31.373011" elapsed="0.000469"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:31.374894" elapsed="0.000352"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:31.369509" elapsed="0.005802"/>
</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-10-06T01:30:31.369008" elapsed="0.006437"/>
</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="PASS" start="2026-10-06T01:30:31.262831" elapsed="0.112692"/>
</kw>
<msg time="2026-10-06T01:30:31.375604" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:31.375643" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.262205" elapsed="0.113552"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:31.375918" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:30:31.375831" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.375813" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.376310" elapsed="0.000024"/>
</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-10-06T01:30:31.376624" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:31.376744" 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="PASS" start="2026-10-06T01:30:31.261581" elapsed="0.115255"/>
</kw>
<msg time="2026-10-06T01:30:31.376920" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:31.376960" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.259276" elapsed="0.117719"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.377281" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:31.377063" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.377047" elapsed="0.000306"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:31.259131" elapsed="0.118256"/>
</iter>
<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-10-06T01:30:31.380256" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:31.380171" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.380153" elapsed="0.000169"/>
</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-10-06T01:30:31.381537" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:31.381447" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.381356" elapsed="0.000244"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:31.382002" level="INFO">${karaf_connection_index} = 604</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-10-06T01:30:31.381769" elapsed="0.000258"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:31.382419" 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-10-06T01:30:31.382220" elapsed="0.000224"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:31.419191" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:31.383189" elapsed="0.036215"/>
</kw>
<msg time="2026-10-06T01:30:31.419571" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:31.419613" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.382641" elapsed="0.037008"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:31.499442" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:31.420292" elapsed="0.079340"/>
</kw>
<msg time="2026-10-06T01:30:31.499814" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:31.499856" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.419850" elapsed="0.080042"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.500184" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:31.499969" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.499948" elapsed="0.000330"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:31.500838" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:31.500475" elapsed="0.000450"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.501184" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:31.500987" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.500970" elapsed="0.000307"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:31.501308" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:31.503897" elapsed="0.000503"/>
</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-10-06T01:30:31.505726" elapsed="0.000469"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:31.507598" elapsed="0.000331"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:31.502159" elapsed="0.005839"/>
</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-10-06T01:30:31.501621" elapsed="0.006495"/>
</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="PASS" start="2026-10-06T01:30:31.381099" elapsed="0.127096"/>
</kw>
<msg time="2026-10-06T01:30:31.508282" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:31.508323" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.380488" elapsed="0.127871"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:31.508532" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:30:31.508444" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.508426" elapsed="0.000184"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.509024" elapsed="0.000024"/>
</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-10-06T01:30:31.509332" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:31.509496" 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="PASS" start="2026-10-06T01:30:31.379867" elapsed="0.129722"/>
</kw>
<msg time="2026-10-06T01:30:31.509691" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:31.509736" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.377634" elapsed="0.132137"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.510065" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:31.509844" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.509827" elapsed="0.000309"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:31.377499" elapsed="0.132658"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:31.135346" elapsed="0.374842"/>
</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-10-06T01:30:31.133209" elapsed="0.377040"/>
</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-10-06T01:30:31.131228" elapsed="0.379082"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.130839" elapsed="0.379518"/>
</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-10-06T01:30:31.129799" elapsed="0.380635"/>
</kw>
<kw name="Add Sample Port To The Manual Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:30:31.513466" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Add Port vx1 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:30:31.512151" elapsed="0.001352">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Add port with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:30:31.129233" elapsed="0.384419">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s2-s2-t18" name="Delete the Bridge Manually and Verify After Fail" line="98">
<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-10-06T01:30:31.515871" elapsed="0.000228"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:30:31.515355" elapsed="0.000795"/>
</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-10-06T01:30:31.517068" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:31.516982" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.516964" elapsed="0.000166"/>
</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-10-06T01:30:31.519057" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:31.518967" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.518950" elapsed="0.000169"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:31.520092" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:31.519756" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:31.520555" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:31.520269" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:31.520620" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:30:31.520764" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:31.519324" elapsed="0.001464"/>
</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-10-06T01:30:31.523334" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:31.523249" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.523231" elapsed="0.000232"/>
</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-10-06T01:30:31.524561" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:31.524478" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.524461" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:31.525021" level="INFO">${karaf_connection_index} = 600</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-10-06T01:30:31.524790" elapsed="0.000256"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:31.525408" 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-10-06T01:30:31.525208" elapsed="0.000225"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:31.558335" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:31.526020" elapsed="0.032530"/>
</kw>
<msg time="2026-10-06T01:30:31.558738" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:31.558782" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.525589" elapsed="0.033229"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:31.645638" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:31.559434" elapsed="0.086408"/>
</kw>
<msg time="2026-10-06T01:30:31.646002" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:31.646048" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.558988" elapsed="0.087095"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.646361" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:31.646154" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.646136" elapsed="0.000342"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:31.647015" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:31.646656" elapsed="0.000448"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.647364" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:31.647166" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.647149" elapsed="0.000324"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:31.647504" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:31.649998" elapsed="0.000497"/>
</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-10-06T01:30:31.651750" elapsed="0.000497"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:31.653601" elapsed="0.000325"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:31.648320" elapsed="0.005672"/>
</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-10-06T01:30:31.647821" elapsed="0.006289"/>
</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="PASS" start="2026-10-06T01:30:31.524201" elapsed="0.129987"/>
</kw>
<msg time="2026-10-06T01:30:31.654271" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:31.654311" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.523610" elapsed="0.130738"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:31.654522" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:31.654436" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.654418" elapsed="0.000183"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:30:31.654960" elapsed="0.000024"/>
</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-10-06T01:30:31.655260" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:31.655325" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:31.522951" elapsed="0.132474"/>
</kw>
<msg time="2026-10-06T01:30:31.655511" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:31.655551" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.521129" elapsed="0.134457"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.655912" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:31.655655" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.655639" elapsed="0.000346"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:31.520989" elapsed="0.135017"/>
</iter>
<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-10-06T01:30:31.658615" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:31.658529" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.658511" elapsed="0.000183"/>
</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-10-06T01:30:31.659815" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:31.659727" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.659709" elapsed="0.000170"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:31.660247" level="INFO">${karaf_connection_index} = 602</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-10-06T01:30:31.660021" elapsed="0.000251"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:31.660630" 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-10-06T01:30:31.660448" elapsed="0.000206"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:31.693475" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:31.661246" elapsed="0.032422"/>
</kw>
<msg time="2026-10-06T01:30:31.693846" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:31.693888" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.660828" elapsed="0.033096"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:31.776338" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:31.694535" elapsed="0.082001"/>
</kw>
<msg time="2026-10-06T01:30:31.776752" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:31.776795" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.694087" elapsed="0.082745"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.777107" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:31.776903" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.776885" elapsed="0.000317"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:31.777777" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:31.777409" elapsed="0.000456"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.778127" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:31.777929" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.777912" elapsed="0.000309"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:31.778252" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:31.780775" elapsed="0.000477"/>
</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-10-06T01:30:31.782496" elapsed="0.000481"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:31.784386" elapsed="0.000331"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:31.779064" elapsed="0.005722"/>
</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-10-06T01:30:31.778534" elapsed="0.006371"/>
</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="PASS" start="2026-10-06T01:30:31.659444" elapsed="0.125537"/>
</kw>
<msg time="2026-10-06T01:30:31.785065" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:31.785106" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.658844" elapsed="0.126298"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:31.785299" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:30:31.785212" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.785195" elapsed="0.000197"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.785788" elapsed="0.000025"/>
</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-10-06T01:30:31.786086" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:31.786152" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:31.658217" elapsed="0.128021"/>
</kw>
<msg time="2026-10-06T01:30:31.786322" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:31.786363" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.656252" elapsed="0.130162"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.786717" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:31.786484" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.786468" elapsed="0.000323"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:31.656115" elapsed="0.130697"/>
</iter>
<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-10-06T01:30:31.790594" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:31.790508" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.790491" elapsed="0.000167"/>
</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-10-06T01:30:31.791819" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:31.791733" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.791715" elapsed="0.000167"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:31.792250" level="INFO">${karaf_connection_index} = 604</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-10-06T01:30:31.792026" elapsed="0.000249"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:31.792638" 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-10-06T01:30:31.792456" elapsed="0.000207"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:31.827257" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:31.793254" elapsed="0.034223"/>
</kw>
<msg time="2026-10-06T01:30:31.827639" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:31.827702" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.792835" elapsed="0.034904"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:31.909265" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:31.828330" elapsed="0.081139"/>
</kw>
<msg time="2026-10-06T01:30:31.909631" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:31.909673" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.827905" elapsed="0.081828"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.910010" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:31.909805" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.909787" elapsed="0.000318"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:31.910639" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:31.910284" elapsed="0.000458"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.911000" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:31.910804" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.910787" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:31.911123" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:31.913568" elapsed="0.000499"/>
</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-10-06T01:30:31.915274" elapsed="0.000508"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:31.917144" elapsed="0.000322"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:31.911919" elapsed="0.005615"/>
</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-10-06T01:30:31.911404" elapsed="0.006246"/>
</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="PASS" start="2026-10-06T01:30:31.791450" elapsed="0.126294"/>
</kw>
<msg time="2026-10-06T01:30:31.917827" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:31.917866" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.790822" elapsed="0.127080"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:31.918056" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:30:31.917971" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.917954" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.918497" elapsed="0.000024"/>
</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-10-06T01:30:31.918889" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:31.918955" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:30:31.790198" elapsed="0.128841"/>
</kw>
<msg time="2026-10-06T01:30:31.919123" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:31.919162" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.787058" elapsed="0.132139"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:31.919496" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:31.919265" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.919249" elapsed="0.000319"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:31.786922" elapsed="0.132667"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:31.520842" elapsed="0.398773"/>
</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-10-06T01:30:31.518655" elapsed="0.401010"/>
</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-10-06T01:30:31.516721" elapsed="0.403012"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.516296" elapsed="0.403478"/>
</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-10-06T01:30:31.514851" elapsed="0.404970"/>
</kw>
<kw name="Delete Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:30:31.922670" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Delete bridge br-s1 using OVS command and verify it gets applied in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:30:31.921366" elapsed="0.001353">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Delete bridge with OVS command and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:30:31.514181" elapsed="0.408673">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s2-s2-t19" name="Create Bridge In Owner and Verify After Fail" line="102">
<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-10-06T01:30:31.924722" elapsed="0.000417"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:30:31.924274" elapsed="0.000930"/>
</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-10-06T01:30:31.926235" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:31.926150" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.926133" elapsed="0.000165"/>
</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-10-06T01:30:31.928263" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:31.928179" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.928163" elapsed="0.000162"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:31.929240" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:31.928916" elapsed="0.000350"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:31.929718" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:31.929432" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:31.929785" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:30:31.929910" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:31.928543" elapsed="0.001390"/>
</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-10-06T01:30:31.932447" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:31.932349" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.932332" elapsed="0.000179"/>
</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-10-06T01:30:31.933643" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:31.933559" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:31.933542" elapsed="0.000189"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:31.934100" level="INFO">${karaf_connection_index} = 600</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-10-06T01:30:31.933874" elapsed="0.000252"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:31.934483" 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-10-06T01:30:31.934285" elapsed="0.000223"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:31.966650" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:31.935090" elapsed="0.031772"/>
</kw>
<msg time="2026-10-06T01:30:31.967017" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:31.967064" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.934662" elapsed="0.032437"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:32.042121" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:31.967722" elapsed="0.074578"/>
</kw>
<msg time="2026-10-06T01:30:32.042473" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:32.042514" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.967262" elapsed="0.075288"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:32.042850" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:32.042621" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.042603" elapsed="0.000341"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:32.043469" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:32.043124" elapsed="0.000433"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:32.043835" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:32.043618" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.043602" elapsed="0.000325"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:32.043958" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:32.046389" elapsed="0.000486"/>
</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-10-06T01:30:32.048089" elapsed="0.000462"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:32.049738" elapsed="0.000305"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:32.044747" elapsed="0.005360"/>
</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-10-06T01:30:32.044223" elapsed="0.006001"/>
</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="PASS" start="2026-10-06T01:30:31.933247" elapsed="0.117053"/>
</kw>
<msg time="2026-10-06T01:30:32.050397" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:32.050438" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.932658" elapsed="0.117816"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:32.050627" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:30:32.050542" elapsed="0.000426"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.050525" elapsed="0.000469"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:30:32.051305" elapsed="0.000024"/>
</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-10-06T01:30:32.051647" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:32.051729" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:31.932057" elapsed="0.119758"/>
</kw>
<msg time="2026-10-06T01:30:32.051899" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:32.051938" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.930256" elapsed="0.121717"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:32.052263" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:32.052042" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.052025" elapsed="0.000309"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:31.930118" elapsed="0.122237"/>
</iter>
<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-10-06T01:30:32.054891" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:32.054805" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.054788" elapsed="0.000167"/>
</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-10-06T01:30:32.056064" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:32.055981" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.055964" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:32.056510" level="INFO">${karaf_connection_index} = 602</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-10-06T01:30:32.056270" elapsed="0.000264"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:32.056893" 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-10-06T01:30:32.056711" elapsed="0.000206"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:32.090051" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:32.057493" elapsed="0.032751"/>
</kw>
<msg time="2026-10-06T01:30:32.090462" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:32.090504" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.057070" elapsed="0.033470"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:32.165761" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:32.091162" elapsed="0.074780"/>
</kw>
<msg time="2026-10-06T01:30:32.166100" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:32.166141" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.090726" elapsed="0.075450"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:32.166466" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:32.166246" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.166228" elapsed="0.000333"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:32.167102" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:32.166764" elapsed="0.000423"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:32.167459" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:32.167248" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.167232" elapsed="0.000361"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:32.167625" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:32.170124" elapsed="0.000611"/>
</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-10-06T01:30:32.171962" elapsed="0.000472"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:32.173620" elapsed="0.000533"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:32.168439" elapsed="0.005779"/>
</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-10-06T01:30:32.167911" elapsed="0.006424"/>
</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="PASS" start="2026-10-06T01:30:32.055721" elapsed="0.118706"/>
</kw>
<msg time="2026-10-06T01:30:32.174511" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:32.174550" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.055107" elapsed="0.119480"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:32.174761" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:32.174658" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.174640" elapsed="0.000200"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:32.175153" elapsed="0.000024"/>
</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-10-06T01:30:32.175469" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:32.175534" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:30:32.054495" elapsed="0.121123"/>
</kw>
<msg time="2026-10-06T01:30:32.175796" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:32.175838" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.052618" elapsed="0.123256"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:32.176160" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:32.175943" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.175926" elapsed="0.000304"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:32.052481" elapsed="0.123770"/>
</iter>
<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-10-06T01:30:32.178785" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:32.178698" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.178660" elapsed="0.000188"/>
</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-10-06T01:30:32.179973" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:32.179890" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.179873" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:32.180424" level="INFO">${karaf_connection_index} = 604</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-10-06T01:30:32.180183" elapsed="0.000266"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:32.180807" 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-10-06T01:30:32.180609" elapsed="0.000222"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:32.216766" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:32.181410" elapsed="0.035535"/>
</kw>
<msg time="2026-10-06T01:30:32.217115" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:32.217157" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.180984" elapsed="0.036209"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:32.317094" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:32.217881" elapsed="0.099394"/>
</kw>
<msg time="2026-10-06T01:30:32.317452" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:32.317493" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.217420" elapsed="0.100109"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:32.317832" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:32.317600" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.317581" elapsed="0.000347"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:32.318461" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "w "[78Cn "[A[78Ce
 "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:32.318104" elapsed="0.000442"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:32.318826" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:32.318608" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.318591" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:32.318949" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:32.321422" elapsed="0.000500"/>
</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-10-06T01:30:32.323148" elapsed="0.000467"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:32.325015" elapsed="0.000305"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:32.319745" elapsed="0.005656"/>
</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-10-06T01:30:32.319214" elapsed="0.006306"/>
</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="PASS" start="2026-10-06T01:30:32.179607" elapsed="0.145990"/>
</kw>
<msg time="2026-10-06T01:30:32.325695" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:32.325736" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.178995" elapsed="0.146776"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:32.325925" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:32.325841" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.325823" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:32.326317" elapsed="0.000023"/>
</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-10-06T01:30:32.326636" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:32.326750" 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="PASS" start="2026-10-06T01:30:32.178384" elapsed="0.148455"/>
</kw>
<msg time="2026-10-06T01:30:32.326922" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:32.326962" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.176509" elapsed="0.150487"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:32.327278" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:32.327063" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.327047" elapsed="0.000350"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:32.176360" elapsed="0.151059"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:31.929980" elapsed="0.397464"/>
</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-10-06T01:30:31.927883" elapsed="0.399611"/>
</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-10-06T01:30:31.925895" elapsed="0.401648"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:31.925436" elapsed="0.402148"/>
</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-10-06T01:30:31.923934" elapsed="0.403697"/>
</kw>
<kw name="Create Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:30:32.331700" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Create bridge br01 in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:30:32.330528" elapsed="0.001207">Variable '${new_owner}' not found.</status>
</kw>
<doc>Create Bridge in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:30:31.923289" elapsed="0.408575">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s2-s2-t20" name="Create Port In Owner and Verify After Fail" line="106">
<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-10-06T01:30:32.333122" elapsed="0.000200"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:30:32.332871" elapsed="0.000514"/>
</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-10-06T01:30:32.334278" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:32.334192" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.334175" elapsed="0.000165"/>
</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-10-06T01:30:32.336202" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:32.336118" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.336101" elapsed="0.000163"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:32.337170" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:32.336847" elapsed="0.000349"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:32.337625" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:32.337344" elapsed="0.000304"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:32.337705" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:30:32.337833" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:32.336478" elapsed="0.001377"/>
</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-10-06T01:30:32.340357" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:32.340273" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.340256" elapsed="0.000183"/>
</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-10-06T01:30:32.341565" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:32.341479" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.341452" elapsed="0.000175"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:32.342015" level="INFO">${karaf_connection_index} = 600</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-10-06T01:30:32.341791" elapsed="0.000252"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:32.342558" 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-10-06T01:30:32.342201" elapsed="0.000383"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:32.375248" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:32.343165" elapsed="0.032293"/>
</kw>
<msg time="2026-10-06T01:30:32.375618" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:32.375659" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.342756" elapsed="0.032960"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:32.447746" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:32.376342" elapsed="0.071621"/>
</kw>
<msg time="2026-10-06T01:30:32.448142" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:32.448183" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.375918" elapsed="0.072300"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:32.448584" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:32.448306" elapsed="0.000352"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.448279" elapsed="0.000425"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:32.449266" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:32.448890" elapsed="0.000462"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:32.449694" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:32.449464" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.449446" elapsed="0.000344"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:32.449823" elapsed="0.000031"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:32.452423" elapsed="0.000508"/>
</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-10-06T01:30:32.454171" elapsed="0.000484"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:32.456070" elapsed="0.000327"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:32.450651" elapsed="0.005814"/>
</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-10-06T01:30:32.450123" elapsed="0.006459"/>
</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="PASS" start="2026-10-06T01:30:32.341173" elapsed="0.115487"/>
</kw>
<msg time="2026-10-06T01:30:32.456763" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:32.456802" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.340586" elapsed="0.116250"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:32.456991" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:32.456906" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.456889" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:30:32.457409" elapsed="0.000024"/>
</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-10-06T01:30:32.457812" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:32.457880" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:32.339984" elapsed="0.117984"/>
</kw>
<msg time="2026-10-06T01:30:32.458055" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:32.458095" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.338175" elapsed="0.119958"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:32.458444" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:32.458202" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.458186" elapsed="0.000331"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:32.338038" elapsed="0.120543"/>
</iter>
<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-10-06T01:30:32.461228" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:32.461143" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.461126" elapsed="0.000164"/>
</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-10-06T01:30:32.462401" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:32.462301" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.462285" elapsed="0.000180"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:32.462874" level="INFO">${karaf_connection_index} = 602</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-10-06T01:30:32.462615" elapsed="0.000284"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:32.463254" 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-10-06T01:30:32.463063" elapsed="0.000216"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:32.497233" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:32.463929" elapsed="0.033508"/>
</kw>
<msg time="2026-10-06T01:30:32.497594" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:32.497636" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.463454" elapsed="0.034217"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:32.570813" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:32.498278" elapsed="0.072714"/>
</kw>
<msg time="2026-10-06T01:30:32.571149" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:32.571190" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.497857" elapsed="0.073368"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:32.571514" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:32.571295" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.571277" elapsed="0.000333"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:32.572155" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:32.571815" elapsed="0.000424"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:32.572514" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:32.572300" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.572283" elapsed="0.000325"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:32.572639" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:32.575123" elapsed="0.000487"/>
</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-10-06T01:30:32.576956" elapsed="0.000468"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:32.578586" elapsed="0.000537"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:32.573439" elapsed="0.005750"/>
</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-10-06T01:30:32.572929" elapsed="0.006374"/>
</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="PASS" start="2026-10-06T01:30:32.462041" elapsed="0.117353"/>
</kw>
<msg time="2026-10-06T01:30:32.579476" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:32.579515" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.461452" elapsed="0.118099"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:32.579769" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:32.579666" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.579647" elapsed="0.000200"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:32.580158" elapsed="0.000024"/>
</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-10-06T01:30:32.580496" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:32.580563" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:30:32.460843" elapsed="0.119806"/>
</kw>
<msg time="2026-10-06T01:30:32.580828" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:32.580869" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.458861" elapsed="0.122044"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:32.581193" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:32.580974" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.580957" elapsed="0.000307"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:32.458721" elapsed="0.122565"/>
</iter>
<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-10-06T01:30:32.583846" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:32.583762" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.583745" elapsed="0.000164"/>
</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-10-06T01:30:32.585055" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:32.584972" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.584955" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:32.585504" level="INFO">${karaf_connection_index} = 604</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-10-06T01:30:32.585262" elapsed="0.000266"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:32.585889" 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-10-06T01:30:32.585705" elapsed="0.000208"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:32.617673" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:32.586503" elapsed="0.031383"/>
</kw>
<msg time="2026-10-06T01:30:32.618052" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:32.618095" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.586069" elapsed="0.032061"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:32.693932" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:32.618771" elapsed="0.075343"/>
</kw>
<msg time="2026-10-06T01:30:32.694272" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:32.694313" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.618301" elapsed="0.076048"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:32.694642" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:32.694434" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.694415" elapsed="0.000348"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:32.695284" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "[78Cr "[A[78C
 "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:32.694944" elapsed="0.000476"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:32.695706" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:32.695484" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.695467" elapsed="0.000336"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:32.695835" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:32.698300" elapsed="0.000517"/>
</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-10-06T01:30:32.700063" elapsed="0.000474"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:32.701793" elapsed="0.000312"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:32.696618" elapsed="0.005554"/>
</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-10-06T01:30:32.696109" elapsed="0.006182"/>
</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="PASS" start="2026-10-06T01:30:32.584641" elapsed="0.117742"/>
</kw>
<msg time="2026-10-06T01:30:32.702467" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:32.702508" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.584054" elapsed="0.118490"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:32.702939" elapsed="0.000111"/>
</return>
<status status="PASS" start="2026-10-06T01:30:32.702614" elapsed="0.000547"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.702597" elapsed="0.000628"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:32.704251" elapsed="0.000065"/>
</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-10-06T01:30:32.705043" elapsed="0.000053"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:32.705195" elapsed="0.000036"/>
</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="PASS" start="2026-10-06T01:30:32.583447" elapsed="0.122007"/>
</kw>
<msg time="2026-10-06T01:30:32.705709" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:32.705812" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.581553" elapsed="0.124346"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:32.706722" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:32.706077" elapsed="0.000767"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.706037" elapsed="0.000858"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:32.581415" elapsed="0.125529"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:32.337902" elapsed="0.369110"/>
</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-10-06T01:30:32.335828" elapsed="0.371310"/>
</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-10-06T01:30:32.333937" elapsed="0.373323"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.333532" elapsed="0.373825"/>
</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-10-06T01:30:32.332512" elapsed="0.374992"/>
</kw>
<kw name="Create Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:30:32.716919" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Add Port vx2 to bridge br01 in controller ${controller_index} and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:30:32.714245" elapsed="0.002753">Variable '${new_owner}' not found.</status>
</kw>
<doc>Create Port in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:30:32.332044" elapsed="0.385250">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s2-s2-t21" name="Modify the destination IP of Port In Owner After Fail" line="110">
<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-10-06T01:30:32.721161" elapsed="0.000581"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:30:32.720202" elapsed="0.001762"/>
</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-10-06T01:30:32.724154" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:32.723952" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.723913" elapsed="0.000383"/>
</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-10-06T01:30:32.728600" elapsed="0.000028"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:32.728397" elapsed="0.000326"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.728327" elapsed="0.000445"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:32.730977" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:32.730077" elapsed="0.000971"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:32.732081" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:32.731424" elapsed="0.000710"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:32.732225" elapsed="0.000059"/>
</return>
<msg time="2026-10-06T01:30:32.732545" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:32.729226" elapsed="0.003370"/>
</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-10-06T01:30:32.736388" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:32.736249" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.736225" elapsed="0.000254"/>
</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-10-06T01:30:32.738108" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:32.737989" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.737965" elapsed="0.000231"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:32.738764" level="INFO">${karaf_connection_index} = 600</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-10-06T01:30:32.738417" elapsed="0.000382"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:32.739289" 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-10-06T01:30:32.739029" elapsed="0.000294"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:32.772323" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:32.740157" elapsed="0.032394"/>
</kw>
<msg time="2026-10-06T01:30:32.772762" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:32.772805" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.739556" elapsed="0.033285"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:32.865599" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:32.773547" elapsed="0.092279"/>
</kw>
<msg time="2026-10-06T01:30:32.865984" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:32.866025" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.773048" elapsed="0.093013"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:32.866377" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:32.866146" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.866123" elapsed="0.000351"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:32.867030" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:32.866658" elapsed="0.000462"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:32.867482" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:32.867240" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.867221" elapsed="0.000360"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:32.867614" elapsed="0.000031"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:32.870497" elapsed="0.000510"/>
</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-10-06T01:30:32.872252" elapsed="0.000497"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:32.873956" elapsed="0.000310"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:32.868477" elapsed="0.005856"/>
</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-10-06T01:30:32.867935" elapsed="0.006538"/>
</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="PASS" start="2026-10-06T01:30:32.737574" elapsed="0.136979"/>
</kw>
<msg time="2026-10-06T01:30:32.874643" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:32.874882" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.736712" elapsed="0.138210"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:32.875083" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:32.874996" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.874977" elapsed="0.000185"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:30:32.875513" elapsed="0.000024"/>
</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-10-06T01:30:32.875840" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:32.875906" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:30:32.735845" elapsed="0.140149"/>
</kw>
<msg time="2026-10-06T01:30:32.876086" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:32.876128" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.733257" elapsed="0.142907"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:32.876468" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:32.876235" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.876219" elapsed="0.000323"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:32.733061" elapsed="0.143503"/>
</iter>
<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-10-06T01:30:32.879250" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:32.879164" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.879146" elapsed="0.000169"/>
</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-10-06T01:30:32.880443" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:32.880341" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:32.880324" elapsed="0.000184"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:32.880903" level="INFO">${karaf_connection_index} = 602</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-10-06T01:30:32.880650" elapsed="0.000278"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:32.881271" 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-10-06T01:30:32.881089" elapsed="0.000206"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:32.915035" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:32.881900" elapsed="0.033314"/>
</kw>
<msg time="2026-10-06T01:30:32.915391" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:32.915475" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.881468" elapsed="0.034045"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.004964" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:32.916128" elapsed="0.089029"/>
</kw>
<msg time="2026-10-06T01:30:33.005320" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:33.005378" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.915700" elapsed="0.089715"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.005721" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.005489" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.005470" elapsed="0.000349"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:33.006346" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:33.006001" elapsed="0.000449"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.006731" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.006513" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.006496" elapsed="0.000330"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:33.006856" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:33.009337" elapsed="0.000515"/>
</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-10-06T01:30:33.011108" elapsed="0.000472"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:33.012795" elapsed="0.000313"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:33.007640" elapsed="0.005533"/>
</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-10-06T01:30:33.007127" elapsed="0.006166"/>
</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="PASS" start="2026-10-06T01:30:32.880079" elapsed="0.133304"/>
</kw>
<msg time="2026-10-06T01:30:33.013467" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:33.013509" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.879485" elapsed="0.134060"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:33.013987" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:33.013616" elapsed="0.000428"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.013598" elapsed="0.000469"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.014414" elapsed="0.000025"/>
</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-10-06T01:30:33.014732" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:33.014798" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:32.878867" elapsed="0.136017"/>
</kw>
<msg time="2026-10-06T01:30:33.014968" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:33.015009" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.876940" elapsed="0.138105"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.015380" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.015148" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.015131" elapsed="0.000324"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:32.876800" elapsed="0.138676"/>
</iter>
<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-10-06T01:30:33.019312" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:33.019225" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.019207" elapsed="0.000185"/>
</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-10-06T01:30:33.020494" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:33.020409" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.020392" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:33.020951" level="INFO">${karaf_connection_index} = 604</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-10-06T01:30:33.020725" elapsed="0.000251"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.021317" 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-10-06T01:30:33.021138" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.053903" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:33.021990" elapsed="0.032110"/>
</kw>
<msg time="2026-10-06T01:30:33.054254" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:33.054297" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.021555" elapsed="0.032778"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.139585" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:33.054979" elapsed="0.084815"/>
</kw>
<msg time="2026-10-06T01:30:33.139954" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:33.139996" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.054529" elapsed="0.085505"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.140312" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.140108" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.140090" elapsed="0.000332"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:33.140961" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:33.140602" elapsed="0.000448"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.141309" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.141112" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.141095" elapsed="0.000323"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:33.141450" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:33.143936" elapsed="0.000489"/>
</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-10-06T01:30:33.145632" elapsed="0.000475"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:33.147474" elapsed="0.000322"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:33.142232" elapsed="0.005631"/>
</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-10-06T01:30:33.141738" elapsed="0.006240"/>
</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="PASS" start="2026-10-06T01:30:33.020135" elapsed="0.127954"/>
</kw>
<msg time="2026-10-06T01:30:33.148170" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:33.148210" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.019541" elapsed="0.128706"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:33.148419" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:33.148317" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.148299" elapsed="0.000200"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.148900" elapsed="0.000024"/>
</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-10-06T01:30:33.149205" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:33.149270" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:33.018928" elapsed="0.130442"/>
</kw>
<msg time="2026-10-06T01:30:33.149457" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:33.149497" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.015787" elapsed="0.133746"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.149833" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.149602" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.149586" elapsed="0.000319"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:33.015587" elapsed="0.134340"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:32.732741" elapsed="0.417214"/>
</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-10-06T01:30:32.727711" elapsed="0.422297"/>
</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-10-06T01:30:32.723262" elapsed="0.426800"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:32.722299" elapsed="0.427804"/>
</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-10-06T01:30:32.719343" elapsed="0.430809"/>
</kw>
<kw name="Modify the destination IP of Sample Port" owner="ClusterOvsdb">
<msg time="2026-10-06T01:30:33.153059" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Modify the dst ip of port vx2 in bridge br01 in controller ${controller_index}.</doc>
<status status="FAIL" start="2026-10-06T01:30:33.151884" elapsed="0.001210">Variable '${new_owner}' not found.</status>
</kw>
<doc>Modify the dst ip of existing port in Owner.</doc>
<status status="FAIL" start="2026-10-06T01:30:32.717882" elapsed="0.435344">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s2-s2-t22" name="Verify Port Is Modified After Fail" line="114">
<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-10-06T01:30:33.154688" elapsed="0.000200"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:30:33.154430" elapsed="0.000508"/>
</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-10-06T01:30:33.155840" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:33.155754" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.155736" elapsed="0.000168"/>
</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-10-06T01:30:33.157785" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:33.157699" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.157668" elapsed="0.000178"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:33.158758" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:33.158417" elapsed="0.000367"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:33.159201" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:33.158931" elapsed="0.000294"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:33.159265" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:30:33.159406" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:33.158048" elapsed="0.001413"/>
</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-10-06T01:30:33.161992" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:33.161907" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.161889" elapsed="0.000166"/>
</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-10-06T01:30:33.163172" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:33.163090" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.163073" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:33.163616" level="INFO">${karaf_connection_index} = 600</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-10-06T01:30:33.163392" elapsed="0.000249"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.163996" 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-10-06T01:30:33.163817" elapsed="0.000203"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.196571" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:33.164623" elapsed="0.032151"/>
</kw>
<msg time="2026-10-06T01:30:33.196930" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:33.196972" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.164174" elapsed="0.032834"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.261967" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:33.197628" elapsed="0.064518"/>
</kw>
<msg time="2026-10-06T01:30:33.262305" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:33.262346" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.197172" elapsed="0.065229"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.262703" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.262473" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.262455" elapsed="0.000345"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:33.263317" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:33.262979" elapsed="0.000438"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.263695" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.263479" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.263462" elapsed="0.000329"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:33.263821" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:33.266282" elapsed="0.000510"/>
</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-10-06T01:30:33.267999" elapsed="0.000464"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:33.269631" elapsed="0.000325"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:33.264597" elapsed="0.005426"/>
</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-10-06T01:30:33.264086" elapsed="0.006058"/>
</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="PASS" start="2026-10-06T01:30:33.162832" elapsed="0.107389"/>
</kw>
<msg time="2026-10-06T01:30:33.270337" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:33.270397" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.162202" elapsed="0.108232"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:33.270591" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:33.270505" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.270488" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:30:33.271279" elapsed="0.000025"/>
</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-10-06T01:30:33.271599" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:33.271666" elapsed="0.000031"/>
</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="PASS" start="2026-10-06T01:30:33.161595" elapsed="0.110176"/>
</kw>
<msg time="2026-10-06T01:30:33.271855" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:33.271894" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.159812" elapsed="0.112118"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.272219" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.271998" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.271982" elapsed="0.000310"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:33.159657" elapsed="0.112656"/>
</iter>
<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-10-06T01:30:33.274860" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:33.274775" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.274756" elapsed="0.000167"/>
</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-10-06T01:30:33.276033" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:33.275949" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.275933" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:33.276477" level="INFO">${karaf_connection_index} = 602</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-10-06T01:30:33.276237" elapsed="0.000265"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.277067" 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-10-06T01:30:33.276883" elapsed="0.000208"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.307772" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:33.277673" elapsed="0.030286"/>
</kw>
<msg time="2026-10-06T01:30:33.308115" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:33.308156" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.277243" elapsed="0.030949"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.368730" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:33.308816" elapsed="0.060089"/>
</kw>
<msg time="2026-10-06T01:30:33.369061" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:33.369101" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.308370" elapsed="0.060767"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.369423" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.369206" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.369188" elapsed="0.000329"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:33.370096" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:33.369750" elapsed="0.000428"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.370452" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.370239" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.370222" elapsed="0.000324"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:33.370576" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:33.373063" elapsed="0.000492"/>
</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-10-06T01:30:33.374783" elapsed="0.000450"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:33.376442" elapsed="0.000369"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:33.371381" elapsed="0.005513"/>
</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-10-06T01:30:33.370873" elapsed="0.006139"/>
</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="PASS" start="2026-10-06T01:30:33.275667" elapsed="0.101422"/>
</kw>
<msg time="2026-10-06T01:30:33.377171" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:33.377210" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.275070" elapsed="0.102176"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:33.377416" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:33.377315" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.377298" elapsed="0.000196"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.377856" elapsed="0.000024"/>
</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-10-06T01:30:33.378157" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:33.378222" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:30:33.274464" elapsed="0.103843"/>
</kw>
<msg time="2026-10-06T01:30:33.378406" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:33.378447" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.272580" elapsed="0.105903"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.378813" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.378552" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.378535" elapsed="0.000351"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:33.272443" elapsed="0.106464"/>
</iter>
<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-10-06T01:30:33.381703" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:33.381597" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.381580" elapsed="0.000188"/>
</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-10-06T01:30:33.383079" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:33.382996" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.382979" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:33.383522" level="INFO">${karaf_connection_index} = 604</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-10-06T01:30:33.383282" elapsed="0.000266"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.383903" 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-10-06T01:30:33.383722" elapsed="0.000205"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.416632" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:33.384553" elapsed="0.032294"/>
</kw>
<msg time="2026-10-06T01:30:33.417004" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:33.417046" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.384121" elapsed="0.032961"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.482896" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:33.417695" elapsed="0.065377"/>
</kw>
<msg time="2026-10-06T01:30:33.483229" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:33.483270" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.417243" elapsed="0.066064"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.483603" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.483397" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.483377" elapsed="0.000345"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:33.484237" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "A "f "t "e "r "[C "F "a "i "l "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:33.483901" elapsed="0.000416"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.484609" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.484414" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.484396" elapsed="0.000329"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:33.484756" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:33.487454" elapsed="0.000503"/>
</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-10-06T01:30:33.489179" elapsed="0.000468"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:33.491060" elapsed="0.000324"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:33.485528" elapsed="0.005925"/>
</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-10-06T01:30:33.485021" elapsed="0.006547"/>
</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="PASS" start="2026-10-06T01:30:33.382738" elapsed="0.108907"/>
</kw>
<msg time="2026-10-06T01:30:33.491750" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:33.491790" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.382107" elapsed="0.109718"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:33.491978" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:33.491895" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.491878" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.492385" elapsed="0.000024"/>
</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-10-06T01:30:33.492832" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:33.492899" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:33.381247" elapsed="0.111739"/>
</kw>
<msg time="2026-10-06T01:30:33.493070" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:33.493142" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.379154" elapsed="0.114026"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.493485" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.493249" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.493233" elapsed="0.000324"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:33.379017" elapsed="0.114561"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:33.159513" elapsed="0.334091"/>
</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-10-06T01:30:33.157394" elapsed="0.336260"/>
</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-10-06T01:30:33.155482" elapsed="0.338240"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.155081" elapsed="0.338683"/>
</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-10-06T01:30:33.154078" elapsed="0.339733"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<msg time="2026-10-06T01:30:33.496690" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>${new_cluster_list}</arg>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:30:33.495414" elapsed="0.001311">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Verify port is modified in all instances.</doc>
<status status="FAIL" start="2026-10-06T01:30:33.153588" elapsed="0.343256">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s2-s2-t23" name="Start Old Candidate Instance" line="118">
<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-10-06T01:30:33.498167" elapsed="0.000213"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:30:33.497922" elapsed="0.000510"/>
</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-10-06T01:30:33.499322" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:33.499235" elapsed="0.000147"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.499218" elapsed="0.000186"/>
</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-10-06T01:30:33.501270" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:33.501187" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.501170" elapsed="0.000163"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:33.502241" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:33.501920" elapsed="0.000347"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:33.502722" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:33.502434" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:33.502787" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:30:33.502914" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:33.501548" elapsed="0.001388"/>
</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-10-06T01:30:33.505463" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:33.505377" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.505345" elapsed="0.000181"/>
</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-10-06T01:30:33.506656" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:33.506573" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.506556" elapsed="0.000188"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:33.507109" level="INFO">${karaf_connection_index} = 600</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-10-06T01:30:33.506888" elapsed="0.000246"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.507491" 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-10-06T01:30:33.507292" elapsed="0.000223"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.540842" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:33.508091" elapsed="0.032996"/>
</kw>
<msg time="2026-10-06T01:30:33.541248" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:33.541289" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.507667" elapsed="0.033658"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.598908" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "S "t "a "r "t "[C "O "l "d "[C "C "a "n "d "i "d "a "t "e "[78C[C "[A[78CI
 "n "s "t "a "n "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:33.541959" elapsed="0.057123"/>
</kw>
<msg time="2026-10-06T01:30:33.599241" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:33.599282" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.541507" elapsed="0.057811"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.599606" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.599402" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.599383" elapsed="0.000341"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:33.600236" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "S "t "a "r "t "[C "O "l "d "[C "C "a "n "d "i "d "a "t "e "[78C[C "[A[78CI
 "n "s "t "a "n "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:33.599903" elapsed="0.000411"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.600587" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.600391" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.600373" elapsed="0.000325"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:33.600730" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:33.603158" elapsed="0.000488"/>
</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-10-06T01:30:33.604868" elapsed="0.000443"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:33.606505" elapsed="0.000538"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:33.601499" elapsed="0.005612"/>
</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-10-06T01:30:33.600995" elapsed="0.006232"/>
</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="PASS" start="2026-10-06T01:30:33.506273" elapsed="0.101030"/>
</kw>
<msg time="2026-10-06T01:30:33.607401" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:33.607441" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.505688" elapsed="0.101788"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:33.607630" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:30:33.607546" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.607529" elapsed="0.000194"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:30:33.608038" elapsed="0.000024"/>
</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-10-06T01:30:33.608340" elapsed="0.000038"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:33.608422" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:33.505071" elapsed="0.103437"/>
</kw>
<msg time="2026-10-06T01:30:33.608591" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:33.608630" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.503256" elapsed="0.105410"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.609085" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.608862" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.608844" elapsed="0.000313"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:33.503119" elapsed="0.106060"/>
</iter>
<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-10-06T01:30:33.611724" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:33.611616" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.611598" elapsed="0.000190"/>
</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-10-06T01:30:33.612903" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:33.612818" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.612800" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:33.613331" level="INFO">${karaf_connection_index} = 602</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-10-06T01:30:33.613107" elapsed="0.000262"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.613728" 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-10-06T01:30:33.613531" elapsed="0.000222"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.644544" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:33.614318" elapsed="0.030439"/>
</kw>
<msg time="2026-10-06T01:30:33.644915" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:33.644957" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.613907" elapsed="0.031085"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.699611" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "S "t "a "r "t "[C "O "l "d "[C "C "a "n "d "i "d "a "t "e "[78C[C "[A[78CI
 "n "s "t "a "n "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:33.645611" elapsed="0.054197"/>
</kw>
<msg time="2026-10-06T01:30:33.699964" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:33.700005" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.645157" elapsed="0.054883"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.700312" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.700110" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.700092" elapsed="0.000331"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:33.700959" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "S "t "a "r "t "[C "O "l "d "[C "C "a "n "d "i "d "a "t "e "[78C[C "[A[78CI
 "n "s "t "a "n "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:33.700604" elapsed="0.000432"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.701299" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.701101" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.701081" elapsed="0.000325"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:33.701437" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:33.703900" elapsed="0.000510"/>
</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-10-06T01:30:33.705641" elapsed="0.000473"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:33.707492" elapsed="0.000326"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:33.702214" elapsed="0.005671"/>
</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-10-06T01:30:33.701724" elapsed="0.006277"/>
</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="PASS" start="2026-10-06T01:30:33.612532" elapsed="0.095581"/>
</kw>
<msg time="2026-10-06T01:30:33.708196" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:33.708236" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.611936" elapsed="0.096335"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:33.708444" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:30:33.708341" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.708324" elapsed="0.000199"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.708920" elapsed="0.000025"/>
</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-10-06T01:30:33.709221" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:33.709286" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:30:33.611301" elapsed="0.098086"/>
</kw>
<msg time="2026-10-06T01:30:33.709473" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:33.709513" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.609448" elapsed="0.100100"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.709853" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.709617" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.709600" elapsed="0.000325"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:33.609288" elapsed="0.100659"/>
</iter>
<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-10-06T01:30:33.712509" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:33.712422" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.712404" elapsed="0.000169"/>
</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-10-06T01:30:33.713697" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:33.713591" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.713574" elapsed="0.000188"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:33.714133" level="INFO">${karaf_connection_index} = 604</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-10-06T01:30:33.713905" elapsed="0.000253"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.714512" 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-10-06T01:30:33.714317" elapsed="0.000219"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.746797" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:33.715119" elapsed="0.031879"/>
</kw>
<msg time="2026-10-06T01:30:33.747153" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:33.747194" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.714708" elapsed="0.032521"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.814901" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "S "t "a "r "t "[C "O "l "d "[C "C "a "n "d "i "d "a "t "e "[78C[C "[A[78CI
 "n "s "t "a "n "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:33.747842" elapsed="0.067232"/>
</kw>
<msg time="2026-10-06T01:30:33.815234" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:33.815275" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.747407" elapsed="0.067903"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.815597" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.815396" elapsed="0.000327"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.815377" elapsed="0.000371"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:33.816265" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "S "t "a "r "t "[C "O "l "d "[C "C "a "n "d "i "d "a "t "e "[78C[C "[A[78CI
 "n "s "t "a "n "c "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:33.815927" elapsed="0.000416"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.816619" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.816420" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.816403" elapsed="0.000332"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:33.816766" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:33.819228" elapsed="0.000508"/>
</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-10-06T01:30:33.820932" elapsed="0.000464"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:33.822554" elapsed="0.000533"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:33.817537" elapsed="0.005616"/>
</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-10-06T01:30:33.817031" elapsed="0.006237"/>
</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="PASS" start="2026-10-06T01:30:33.713316" elapsed="0.110042"/>
</kw>
<msg time="2026-10-06T01:30:33.823442" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:33.823481" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.712739" elapsed="0.110777"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:33.823671" elapsed="0.000041"/>
</return>
<status status="PASS" start="2026-10-06T01:30:33.823586" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.823569" elapsed="0.000196"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.824076" elapsed="0.000024"/>
</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-10-06T01:30:33.824388" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:33.824454" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:30:33.712106" elapsed="0.112432"/>
</kw>
<msg time="2026-10-06T01:30:33.824620" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:33.824660" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.710193" elapsed="0.114594"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.825076" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.824859" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.824843" elapsed="0.000304"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:33.710056" elapsed="0.115112"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:33.502983" elapsed="0.322212"/>
</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-10-06T01:30:33.500894" elapsed="0.324350"/>
</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-10-06T01:30:33.498982" elapsed="0.326311"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.498577" elapsed="0.326756"/>
</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-10-06T01:30:33.497566" elapsed="0.327858"/>
</kw>
<kw name="Start_Single_Member" owner="ClusterManagement">
<msg time="2026-10-06T01:30:33.827114" level="FAIL">Variable '${original_candidate}' not found.</msg>
<arg>${original_candidate}</arg>
<doc>Convenience keyword that starts the specified member of the cluster.</doc>
<status status="FAIL" start="2026-10-06T01:30:33.825626" elapsed="0.001555">Variable '${original_candidate}' not found.</status>
</kw>
<doc>Start Owner Instance and verify it is active</doc>
<status status="FAIL" start="2026-10-06T01:30:33.497108" elapsed="0.330195">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s2-s2-t24" name="Check Shards Status After Recover" line="122">
<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-10-06T01:30:33.828720" elapsed="0.000203"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:30:33.828459" elapsed="0.000513"/>
</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-10-06T01:30:33.829880" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:33.829792" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.829775" elapsed="0.000167"/>
</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-10-06T01:30:33.831819" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:33.831734" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.831716" elapsed="0.000164"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:30:33.832787" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:30:33.832447" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:30:33.833231" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:30:33.832962" elapsed="0.000293"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:30:33.833295" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:30:33.833438" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:30:33.832079" elapsed="0.001382"/>
</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-10-06T01:30:33.835960" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:33.835876" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.835859" elapsed="0.000164"/>
</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-10-06T01:30:33.837139" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:33.837056" elapsed="0.000124"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.837039" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:33.837584" level="INFO">${karaf_connection_index} = 600</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-10-06T01:30:33.837341" elapsed="0.000267"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.837967" 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-10-06T01:30:33.837785" elapsed="0.000206"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.869611" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:33.838567" elapsed="0.031245"/>
</kw>
<msg time="2026-10-06T01:30:33.869969" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:33.870011" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.838143" elapsed="0.031903"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.932122" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CA
 "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:33.870654" elapsed="0.061654"/>
</kw>
<msg time="2026-10-06T01:30:33.932488" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:33.932531" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.870208" elapsed="0.062360"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.932876" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.932640" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.932621" elapsed="0.000352"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:33.933556" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CA
 "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:33.933185" elapsed="0.000452"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.933920" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.933719" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.933701" elapsed="0.000313"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:33.934044" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:33.936535" elapsed="0.000503"/>
</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-10-06T01:30:33.938269" elapsed="0.000491"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:33.940141" elapsed="0.000326"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:33.934852" elapsed="0.005683"/>
</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-10-06T01:30:33.934312" elapsed="0.006342"/>
</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="PASS" start="2026-10-06T01:30:33.836800" elapsed="0.103949"/>
</kw>
<msg time="2026-10-06T01:30:33.940831" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:33.940871" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.836169" elapsed="0.104738"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:33.941060" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:30:33.940975" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.940958" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:30:33.941486" elapsed="0.000024"/>
</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-10-06T01:30:33.941876" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:33.941942" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:33.835572" elapsed="0.106456"/>
</kw>
<msg time="2026-10-06T01:30:33.942113" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:33.942153" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.833795" elapsed="0.108393"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:33.942485" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:33.942255" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.942239" elapsed="0.000317"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:30:33.833641" elapsed="0.108936"/>
</iter>
<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-10-06T01:30:33.945127" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:33.945041" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.945023" elapsed="0.000168"/>
</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-10-06T01:30:33.946294" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:33.946209" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:33.946192" elapsed="0.000183"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:33.946767" level="INFO">${karaf_connection_index} = 602</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-10-06T01:30:33.946518" elapsed="0.000274"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.947133" 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-10-06T01:30:33.946953" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:33.979905" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:33.947788" elapsed="0.032308"/>
</kw>
<msg time="2026-10-06T01:30:33.980253" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:33.980296" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.947341" elapsed="0.032991"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:34.057823" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CA
 "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:33.980956" elapsed="0.077051"/>
</kw>
<msg time="2026-10-06T01:30:34.058164" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:34.058206" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.980512" elapsed="0.077729"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:34.058529" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:34.058311" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:34.058293" elapsed="0.000331"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:34.059168" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CA
 "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:34.058827" elapsed="0.000421"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:34.059522" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:34.059311" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:34.059294" elapsed="0.000323"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:34.059648" elapsed="0.000040"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:34.062171" elapsed="0.000493"/>
</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-10-06T01:30:34.063921" elapsed="0.000479"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:34.065610" elapsed="0.000333"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:34.060443" elapsed="0.005568"/>
</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-10-06T01:30:34.059930" elapsed="0.006197"/>
</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="PASS" start="2026-10-06T01:30:33.945950" elapsed="0.120253"/>
</kw>
<msg time="2026-10-06T01:30:34.066285" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:34.066326" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.945338" elapsed="0.121038"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:34.066533" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:30:34.066448" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:34.066430" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:34.067208" elapsed="0.000024"/>
</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-10-06T01:30:34.067544" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:34.067609" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:33.944744" elapsed="0.122971"/>
</kw>
<msg time="2026-10-06T01:30:34.067801" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:34.067873" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.942840" elapsed="0.125070"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:34.068197" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:34.067980" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:34.067964" elapsed="0.000305"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:30:33.942701" elapsed="0.125590"/>
</iter>
<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-10-06T01:30:34.071801" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:34.071715" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:34.071697" elapsed="0.000168"/>
</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-10-06T01:30:34.072977" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:30:34.072893" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:34.072875" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:30:34.073429" level="INFO">${karaf_connection_index} = 604</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-10-06T01:30:34.073188" elapsed="0.000266"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:30:34.073813" 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-10-06T01:30:34.073614" elapsed="0.000224"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:30:34.107400" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:30:34.074420" elapsed="0.033159"/>
</kw>
<msg time="2026-10-06T01:30:34.107779" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:30:34.107822" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:34.073993" elapsed="0.033864"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:30:34.174288" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CA
 "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:30:34.108461" elapsed="0.066018"/>
</kw>
<msg time="2026-10-06T01:30:34.174637" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:30:34.174701" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:34.108021" elapsed="0.066717"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:34.175009" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:34.174808" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:34.174790" elapsed="0.000314"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:30:34.175638" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "S "h "a "r "d "s "[C "S "t "a "t "u "s "[78C[C "[A[78CA
 "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:30:34.175282" elapsed="0.000457"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:34.176000" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:34.175802" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:34.175785" elapsed="0.000309"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:30:34.176125" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:30:34.178633" elapsed="0.000494"/>
</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-10-06T01:30:34.180368" elapsed="0.000482"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:30:34.182053" elapsed="0.000326"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:30:34.176929" elapsed="0.005551"/>
</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-10-06T01:30:34.176412" elapsed="0.006189"/>
</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="PASS" start="2026-10-06T01:30:34.072609" elapsed="0.110257"/>
</kw>
<msg time="2026-10-06T01:30:34.182953" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:34.182994" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:34.072013" elapsed="0.111016"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:30:34.183185" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:30:34.183099" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:34.183082" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:34.183588" elapsed="0.000025"/>
</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-10-06T01:30:34.183909" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:30:34.183974" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:30:34.071404" elapsed="0.112657"/>
</kw>
<msg time="2026-10-06T01:30:34.184144" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:30:34.184185" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:34.068556" elapsed="0.115664"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:34.184523" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:30:34.184288" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:30:34.184271" elapsed="0.000325"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:30:34.068419" elapsed="0.116199"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:30:33.833507" elapsed="0.351137"/>
</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-10-06T01:30:33.831426" elapsed="0.353390"/>
</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-10-06T01:30:33.829521" elapsed="0.355348"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:30:33.829117" elapsed="0.355794"/>
</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-10-06T01:30:33.828108" elapsed="0.356850"/>
</kw>
<kw name="Check Ovsdb Shards Status After Cluster Event" owner="ClusterOvsdb">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:34.193487" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:34.193247" elapsed="0.000480">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:34.192850" elapsed="0.000985">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:34.193884" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:34.189981" elapsed="0.003946"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:34.189606" elapsed="0.004408">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:34.194229" elapsed="0.000021"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:34.194459" elapsed="0.000023"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:34.194734" elapsed="0.000023"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:34.185993" elapsed="0.008850">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:35.212954" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:35.212416" elapsed="0.000620">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:35.211464" elapsed="0.001813">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:35.213422" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:35.204845" elapsed="0.008677"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:35.203954" elapsed="0.009790">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:35.214249" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:35.214793" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:35.215273" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:35.195565" elapsed="0.019967">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:36.234208" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:36.233655" elapsed="0.000640">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:36.232714" elapsed="0.001862">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:36.234719" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:36.226143" elapsed="0.008679"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:36.225211" elapsed="0.009804">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:36.235550" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:36.236079" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:36.236573" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:36.216397" elapsed="0.020440">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:37.254723" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:37.254154" elapsed="0.000653">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:37.253202" elapsed="0.001966">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:37.255284" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:37.246645" elapsed="0.008767"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:37.245794" elapsed="0.009817">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:37.256144" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:37.256661" elapsed="0.000081"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:37.257178" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:37.237609" elapsed="0.019827">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:38.275446" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:38.274925" elapsed="0.000600">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:38.273951" elapsed="0.001833">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:38.275895" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:38.267338" elapsed="0.008652"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:38.266472" elapsed="0.009709">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:38.276722" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:38.277203" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:38.277733" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:38.258116" elapsed="0.019851">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:39.295548" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:39.295029" elapsed="0.000595">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:39.294075" elapsed="0.001806">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:39.295987" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:39.287435" elapsed="0.008647"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:39.286573" elapsed="0.009699">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:39.296888" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:39.297397" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:39.297911" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:39.278607" elapsed="0.019540">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:40.316415" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:40.315874" elapsed="0.000622">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:40.314931" elapsed="0.002087">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:40.317133" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:40.308258" elapsed="0.008974"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:40.307406" elapsed="0.010052">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:40.317984" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:40.318499" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:40.319010" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:40.298893" elapsed="0.020350">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:41.338814" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:41.338194" elapsed="0.000725">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:41.337224" elapsed="0.002270">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:41.339630" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:41.330195" elapsed="0.009582"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:41.329234" elapsed="0.010746">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:41.340562" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:41.341117" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:41.341630" elapsed="0.000078"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:41.320396" elapsed="0.021506">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:42.361977" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:42.361416" elapsed="0.000756">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:42.360342" elapsed="0.002248">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:42.362744" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:42.353474" elapsed="0.009376"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:42.352558" elapsed="0.010487">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:42.363606" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:42.364147" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:42.364651" elapsed="0.000078"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:42.343244" elapsed="0.021676">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:43.384482" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:43.383923" elapsed="0.000648">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:43.382561" elapsed="0.002312">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:43.384993" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:43.375721" elapsed="0.009377"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:43.374800" elapsed="0.010520">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:43.385900" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:43.386539" elapsed="0.000053"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:43.387083" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:43.366075" elapsed="0.021283">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:44.407417" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:44.406868" elapsed="0.000639">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:44.405918" elapsed="0.001880">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:44.407917" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:44.399094" elapsed="0.008926"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:44.397888" elapsed="0.010851">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:44.409307" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:44.409840" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:44.410350" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:44.388637" elapsed="0.021951">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:45.429405" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:45.428839" elapsed="0.000653">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:45.427807" elapsed="0.001980">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:45.429909" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:45.421071" elapsed="0.008940"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:45.420155" elapsed="0.010050">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:45.431024" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:45.431556" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:45.432066" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:45.411583" elapsed="0.020739">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:46.452057" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:46.451496" elapsed="0.000648">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:46.450525" elapsed="0.001907">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:46.452551" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:46.443792" elapsed="0.008861"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:46.442869" elapsed="0.010008">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:46.453455" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:46.453985" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:46.454513" elapsed="0.000226"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:46.433460" elapsed="0.021477">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:47.473661" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:47.473100" elapsed="0.000681">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:47.472117" elapsed="0.001928">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:47.474164" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:47.465493" elapsed="0.008799"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:47.464560" elapsed="0.009927">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:47.475045" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:47.475566" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:47.476078" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:47.456083" elapsed="0.020255">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:48.495406" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:48.494854" elapsed="0.000638">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:48.493911" elapsed="0.001866">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:48.495896" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:48.487239" elapsed="0.008758"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:48.486285" elapsed="0.009929">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:48.496768" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:48.497286" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:48.497790" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:48.477359" elapsed="0.020664">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:49.514112" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:49.513503" elapsed="0.000725">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:49.512524" elapsed="0.002212">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:49.514865" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:49.505475" elapsed="0.009500"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:49.504482" elapsed="0.010708">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:49.515765" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:49.516295" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:49.516799" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:49.498715" elapsed="0.018321">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:50.536532" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:50.535984" elapsed="0.000635">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:50.535032" elapsed="0.001878">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:50.537029" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:50.528286" elapsed="0.008843"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:50.527310" elapsed="0.010043">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:50.537901" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:50.538488" elapsed="0.000067"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:50.539032" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:50.518113" elapsed="0.021180">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:51.558580" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:51.558009" elapsed="0.000664">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:51.556524" elapsed="0.002465">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:51.559106" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:51.549628" elapsed="0.009606"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:51.548749" elapsed="0.010678">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:51.559977" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:51.560632" elapsed="0.000080"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:51.561138" elapsed="0.000074"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:51.540385" elapsed="0.021014">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:52.579802" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:52.579266" elapsed="0.000620">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:52.578322" elapsed="0.001803">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:52.580263" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:52.571664" elapsed="0.008695"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:52.570808" elapsed="0.009741">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:52.581079" elapsed="0.000067"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:52.581588" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:52.582100" elapsed="0.000072"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:52.562299" elapsed="0.020061">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:53.600170" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:53.599573" elapsed="0.000683">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:53.598588" elapsed="0.001918">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:53.600620" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:53.592046" elapsed="0.008783"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:53.591196" elapsed="0.009833">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:53.601560" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:53.602069" elapsed="0.000073"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:53.602564" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:53.583191" elapsed="0.019631">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:54.620979" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:54.620395" elapsed="0.000666">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:54.619446" elapsed="0.001885">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:54.621444" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:54.612960" elapsed="0.008582"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:54.611980" elapsed="0.009782">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:54.622284" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:54.622794" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:54.623290" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:54.603547" elapsed="0.019975">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:55.642974" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:55.642424" elapsed="0.000638">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:55.641339" elapsed="0.002009">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:55.643463" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:55.634049" elapsed="0.009516"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:55.633152" elapsed="0.010633">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:55.644318" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:55.644886" elapsed="0.000068"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:55.645427" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:55.624471" elapsed="0.021187">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:56.666409" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:56.665891" elapsed="0.000595">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:56.664940" elapsed="0.001807">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:56.666857" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:56.658393" elapsed="0.008564"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:56.657518" elapsed="0.009771">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:56.667841" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:56.668344" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:56.668863" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:56.646351" elapsed="0.022774">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:57.689953" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:57.689377" elapsed="0.000657">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:57.688165" elapsed="0.002138">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:57.690414" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:57.679989" elapsed="0.010525"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:57.678904" elapsed="0.011831">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:57.691258" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:57.691770" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:57.692267" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:57.669825" elapsed="0.022673">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:58.711098" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:58.710483" elapsed="0.000701">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:58.709541" elapsed="0.001895">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:58.711546" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:58.702907" elapsed="0.008740"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:58.702027" elapsed="0.009853">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:58.712408" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:58.712926" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:58.713427" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:58.693349" elapsed="0.020472">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:30:59.732983" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:30:59.732423" elapsed="0.000689">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:59.731471" elapsed="0.001902">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:30:59.733487" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:30:59.723815" elapsed="0.009773"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:30:59.722938" elapsed="0.010875">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:59.734622" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:59.735173" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:30:59.735649" elapsed="0.000077"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:59.714738" elapsed="0.021178">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:00.755065" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:00.754498" elapsed="0.000652">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:00.753558" elapsed="0.001839">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:00.755507" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:00.746666" elapsed="0.008940"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:00.745800" elapsed="0.010031">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:00.756357" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:00.756871" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:00.757486" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:00.736811" elapsed="0.020961">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:01.775913" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:01.775376" elapsed="0.000618">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:01.774429" elapsed="0.001835">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:01.776508" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:01.767875" elapsed="0.008737"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:01.766988" elapsed="0.009861">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:01.777376" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:01.778200" elapsed="0.000058"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:01.778721" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:01.758654" elapsed="0.020305">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:02.798075" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:02.797507" elapsed="0.000654">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:02.796539" elapsed="0.002067">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:02.798760" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:02.789545" elapsed="0.009320"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:02.788619" elapsed="0.010460">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:02.799594" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:02.800140" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:02.800613" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:02.779893" elapsed="0.020987">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:03.818792" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:03.818248" elapsed="0.000628">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:03.817298" elapsed="0.001859">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:03.819270" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:03.810734" elapsed="0.008637"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:03.809856" elapsed="0.009705">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:03.820117" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:03.820602" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:03.821247" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:03.801717" elapsed="0.019763">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:04.839946" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:04.839398" elapsed="0.000655">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:04.838453" elapsed="0.001852">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:04.840416" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:04.831733" elapsed="0.008783"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:04.830855" elapsed="0.009881">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:04.841336" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:04.841853" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:04.842353" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:04.822301" elapsed="0.020286">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:05.860343" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:05.859822" elapsed="0.000602">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:05.858886" elapsed="0.001778">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:05.860809" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:05.852317" elapsed="0.008592"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:05.851441" elapsed="0.009795">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:05.861817" elapsed="0.000053"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:05.862342" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:05.862964" elapsed="0.000074"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:05.843389" elapsed="0.019841">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:06.883397" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:06.882803" elapsed="0.000688">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:06.881818" elapsed="0.002180">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:06.884122" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:06.874663" elapsed="0.009564"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:06.873768" elapsed="0.010648">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:06.885007" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:06.885513" elapsed="0.000057"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:06.886090" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:06.864330" elapsed="0.021991">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:07.905473" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:07.904904" elapsed="0.000668">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:07.903870" elapsed="0.002026">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:07.906041" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:07.897100" elapsed="0.009052"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:07.896164" elapsed="0.010184">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:07.906923" elapsed="0.000067"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:07.907453" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:07.907980" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:07.887430" elapsed="0.020786">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:08.929339" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:08.928732" elapsed="0.000708">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:08.927741" elapsed="0.002050">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:08.929926" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:08.920573" elapsed="0.009493"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:08.919569" elapsed="0.010695">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:08.931053" elapsed="0.000055"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:08.931580" elapsed="0.000053"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:08.932155" elapsed="0.000052"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:08.909408" elapsed="0.022993">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:09.951401" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:09.950809" elapsed="0.000683">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:09.949750" elapsed="0.002130">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:09.952034" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:09.943111" elapsed="0.009032"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:09.942209" elapsed="0.010131">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:09.952906" elapsed="0.000067"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:09.953426" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:09.953955" elapsed="0.000051"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:09.933561" elapsed="0.020629">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:10.974174" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:10.973574" elapsed="0.000695">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:10.972620" elapsed="0.001940">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:10.974712" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:10.965705" elapsed="0.009115"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:10.964779" elapsed="0.010270">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:10.975594" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:10.976154" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:10.976628" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:10.955268" elapsed="0.021624">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:11.996098" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:11.995503" elapsed="0.000688">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:11.994458" elapsed="0.002000">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:11.996576" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:11.987568" elapsed="0.009144"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:11.986660" elapsed="0.010275">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:11.997464" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:11.998012" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:11.998485" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:11.978208" elapsed="0.020540">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:13.018341" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:13.017787" elapsed="0.000644">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:13.016774" elapsed="0.001945">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:13.018838" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:13.009657" elapsed="0.009305"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:13.008775" elapsed="0.010385">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:13.019716" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:13.020394" elapsed="0.000058"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:13.020969" elapsed="0.000052"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:12.999811" elapsed="0.021400">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:14.040551" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:14.040011" elapsed="0.000634">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:14.039007" elapsed="0.002008">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:14.041136" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:14.031919" elapsed="0.009325"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:14.031011" elapsed="0.010594">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:14.042201" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:14.042745" elapsed="0.000070"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:14.043365" elapsed="0.000051"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:14.022316" elapsed="0.021290">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:15.063191" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:15.062599" elapsed="0.000687">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:15.061519" elapsed="0.002051">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:15.063721" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:15.054782" elapsed="0.009049"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:15.053891" elapsed="0.010169">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:15.064600" elapsed="0.000045"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:15.065146" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:15.065614" elapsed="0.000046"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:15.044723" elapsed="0.021180">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:16.084460" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:16.083919" elapsed="0.000626">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:16.082997" elapsed="0.001845">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:16.084987" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:16.076324" elapsed="0.008770"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:16.075450" elapsed="0.009846">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:16.085879" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:16.086375" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:16.086894" elapsed="0.000156"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:16.066777" elapsed="0.020466">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:17.106273" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:17.105674" elapsed="0.000682">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:17.104739" elapsed="0.001867">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:17.106752" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:17.098090" elapsed="0.008785"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:17.097183" elapsed="0.009885">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:17.107571" elapsed="0.000045"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:17.108102" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:17.108573" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:17.088196" elapsed="0.020640">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:18.126902" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:18.126336" elapsed="0.000652">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:18.125400" elapsed="0.001853">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:18.127366" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:18.118822" elapsed="0.008645"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:18.117961" elapsed="0.009694">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:18.128220" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:18.128736" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:18.129225" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:18.109764" elapsed="0.019691">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:19.148292" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:19.147754" elapsed="0.000623">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:19.146462" elapsed="0.002303">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:19.148903" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:19.139865" elapsed="0.009139"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:19.138995" elapsed="0.010199">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:19.149717" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:19.150221" elapsed="0.000060"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:19.150757" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:19.130380" elapsed="0.020637">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:20.168836" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:20.168241" elapsed="0.000682">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:20.167306" elapsed="0.001871">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:20.169287" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:20.160827" elapsed="0.008557"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:20.159964" elapsed="0.009619">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:20.170150" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:20.170630" elapsed="0.000084"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:20.171166" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:20.151913" elapsed="0.019484">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:21.192659" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:21.192150" elapsed="0.000623">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:21.191200" elapsed="0.001834">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:21.193143" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:21.184349" elapsed="0.008891"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:21.183467" elapsed="0.009957">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:21.193969" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:21.194553" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:21.195074" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:21.172183" elapsed="0.023121">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:22.214160" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:22.213580" elapsed="0.000671">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:22.212628" elapsed="0.001884">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:22.214629" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:22.205763" elapsed="0.009123"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:22.204862" elapsed="0.010230">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:22.215628" elapsed="0.000076"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:22.216177" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:22.216653" elapsed="0.000078"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:22.196445" elapsed="0.020500">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:23.234739" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:23.234209" elapsed="0.000639">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:23.233262" elapsed="0.001820">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:23.235193" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:23.226599" elapsed="0.008691"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:23.225792" elapsed="0.009689">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:23.236035" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:23.236517" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:23.237045" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:23.217543" elapsed="0.019736">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:24.256375" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:24.255845" elapsed="0.000620">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:24.254881" elapsed="0.001924">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:24.256930" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:24.248183" elapsed="0.008852"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:24.247104" elapsed="0.010129">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:24.257866" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:24.258370" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:24.258911" elapsed="0.000051"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:24.238400" elapsed="0.020751">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:25.278645" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:25.278131" elapsed="0.000721">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:25.277158" elapsed="0.001939">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:25.279211" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:25.269672" elapsed="0.009637"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:25.268843" elapsed="0.010657">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:25.280132" elapsed="0.000054"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:25.280628" elapsed="0.000092"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:25.281181" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:25.259994" elapsed="0.021422">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:26.300076" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:26.299489" elapsed="0.000673">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:26.298522" elapsed="0.001886">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:26.300521" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:26.291168" elapsed="0.009452"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:26.290283" elapsed="0.010822">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:26.301623" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:26.302178" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:26.302652" elapsed="0.000095"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:26.282215" elapsed="0.020726">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:27.321088" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:27.320522" elapsed="0.000645">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:27.319575" elapsed="0.001824">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:27.321508" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:27.312922" elapsed="0.008684"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:27.312055" elapsed="0.009802">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:27.322357" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:27.322894" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:27.323370" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:27.303603" elapsed="0.020000">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:28.341233" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:28.340668" elapsed="0.000646">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:28.339780" elapsed="0.001774">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:28.341663" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:28.333243" elapsed="0.008571"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:28.332282" elapsed="0.009725">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:28.342513" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:28.343048" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:28.343519" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:28.324328" elapsed="0.019594">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:29.361987" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:29.361433" elapsed="0.000633">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:29.360488" elapsed="0.001808">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:29.362406" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:29.353987" elapsed="0.008516"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:29.353104" elapsed="0.009639">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:29.363239" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:29.363775" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:29.364253" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:29.344586" elapsed="0.019899">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:30.382024" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:30.381468" elapsed="0.000636">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:30.380536" elapsed="0.001996">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:30.382653" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:30.373924" elapsed="0.008893"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:30.373061" elapsed="0.009957">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:30.383512" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:30.384051" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:30.384530" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:30.365173" elapsed="0.019639">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:31.403334" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:31.402806" elapsed="0.000611">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:31.401843" elapsed="0.001880">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:31.403985" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:31.395030" elapsed="0.009060"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:31.394141" elapsed="0.010145">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:31.404886" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:31.405382" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:31.405908" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:31.385529" elapsed="0.020622">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:32.424071" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:32.423513" elapsed="0.000639">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:32.422524" elapsed="0.001873">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:32.424507" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:32.415996" elapsed="0.008610"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:32.415118" elapsed="0.009732">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:32.425348" elapsed="0.000045"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:32.425880" elapsed="0.000138"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:32.426456" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:32.406992" elapsed="0.019769">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:33.445043" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:33.444473" elapsed="0.000652">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:33.443525" elapsed="0.001838">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:33.445473" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:33.436971" elapsed="0.008599"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:33.436090" elapsed="0.009724">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:33.446311" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:33.446842" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:33.447469" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:33.427507" elapsed="0.020273">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:34.465275" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:34.464778" elapsed="0.000576">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:34.463838" elapsed="0.001749">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:34.465754" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:34.457325" elapsed="0.008529"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:34.456462" elapsed="0.009657">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:34.466618" elapsed="0.000091"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:34.467145" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:34.467611" elapsed="0.000100"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:34.448477" elapsed="0.019426">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:35.486814" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:35.486274" elapsed="0.000618">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:35.485328" elapsed="0.001794">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:35.487230" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:35.478739" elapsed="0.008586"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:35.477836" elapsed="0.009678">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:35.488051" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:35.488526" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:35.489064" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:35.468579" elapsed="0.020718">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:36.508011" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:36.507445" elapsed="0.000646">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:36.506491" elapsed="0.002040">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:36.508721" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:36.499119" elapsed="0.009728"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:36.498230" elapsed="0.010815">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:36.509550" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:36.510178" elapsed="0.000053"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:36.510731" elapsed="0.000064"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:36.490090" elapsed="0.020925">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:37.529018" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:37.528445" elapsed="0.000653">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:37.527510" elapsed="0.001820">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:37.529439" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:37.521032" elapsed="0.008504"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:37.520153" elapsed="0.009629">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:37.530293" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:37.530839" elapsed="0.000052"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:37.531316" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:37.511652" elapsed="0.019898">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:38.550452" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:38.549938" elapsed="0.000600">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:38.548937" elapsed="0.001986">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:38.551041" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:38.542108" elapsed="0.009035"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:38.541173" elapsed="0.010157">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:38.552077" elapsed="0.000053"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:38.552579" elapsed="0.000072"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:38.553104" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:38.532418" elapsed="0.020919">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:39.573170" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:39.572643" elapsed="0.000608">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:39.571732" elapsed="0.001767">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:39.573633" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:39.564406" elapsed="0.009355"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:39.563475" elapsed="0.010480">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:39.574456" elapsed="0.000045"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:39.575251" elapsed="0.000054"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:39.575810" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:39.554195" elapsed="0.021850">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:40.594010" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:40.593449" elapsed="0.000642">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:40.592516" elapsed="0.001816">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:40.594463" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:40.585828" elapsed="0.008759"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:40.584961" elapsed="0.009847">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:40.595308" elapsed="0.000045"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:40.595832" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:40.596297" elapsed="0.000046"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:40.576834" elapsed="0.019690">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:41.614982" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:41.614334" elapsed="0.000730">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:41.613365" elapsed="0.001938">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:41.615414" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:41.606852" elapsed="0.008658"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:41.605948" elapsed="0.009808">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:41.616252" elapsed="0.000045"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:41.616785" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:41.617254" elapsed="0.000045"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:41.597407" elapsed="0.020103">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:42.636502" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:42.635982" elapsed="0.000628">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:42.635035" elapsed="0.001858">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:42.637004" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:42.627914" elapsed="0.009191"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:42.627026" elapsed="0.010279">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:42.637873" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:42.638361" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:42.638880" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:42.618290" elapsed="0.020822">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:43.656874" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:43.656328" elapsed="0.000625">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:43.655395" elapsed="0.001789">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:43.657290" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:43.648950" elapsed="0.008437"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:43.648092" elapsed="0.009643">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:43.658237" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:43.658768" elapsed="0.000054"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:43.659247" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:43.639860" elapsed="0.019616">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:44.677871" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:44.677254" elapsed="0.000700">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:44.676321" elapsed="0.001878">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:44.678309" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:44.669771" elapsed="0.008637"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:44.668913" elapsed="0.009708">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:44.679170" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:44.679714" elapsed="0.000053"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:44.680190" elapsed="0.000046"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:44.660711" elapsed="0.019708">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:45.702139" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:45.701603" elapsed="0.000621">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:45.700672" elapsed="0.001798">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:45.702609" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:45.694142" elapsed="0.008597"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:45.693245" elapsed="0.009686">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:45.703492" elapsed="0.000101"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:45.704071" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:45.704570" elapsed="0.000188"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:45.681486" elapsed="0.023472">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:46.723085" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:46.722545" elapsed="0.000624">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:46.721587" elapsed="0.001827">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:46.723553" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:46.715022" elapsed="0.008634"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:46.714149" elapsed="0.009727">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:46.724383" elapsed="0.000044"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:46.724972" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:46.725476" elapsed="0.000072"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:46.705903" elapsed="0.019894">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:47.745283" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:47.744601" elapsed="0.000768">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:47.743617" elapsed="0.002099">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:47.745855" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:47.736531" elapsed="0.009435"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:47.735559" elapsed="0.010608">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:47.746985" elapsed="0.000053"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:47.747511" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:47.748015" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:47.726625" elapsed="0.021624">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:48.766329" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:48.765824" elapsed="0.000584">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:48.764888" elapsed="0.001999">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:48.767007" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:48.758305" elapsed="0.008803"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:48.757403" elapsed="0.009897">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:48.767852" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:48.768342" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:48.768898" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:48.749161" elapsed="0.019969">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:49.787375" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:49.786875" elapsed="0.000580">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:49.785929" elapsed="0.001825">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:49.787871" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:49.779109" elapsed="0.008863"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:49.778239" elapsed="0.009921">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:49.788753" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:49.789241" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:49.789762" elapsed="0.000050"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:49.769872" elapsed="0.020126">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:50.808856" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:50.808292" elapsed="0.000647">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:50.807305" elapsed="0.001883">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:50.809323" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:50.800394" elapsed="0.009032"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:50.799412" elapsed="0.010290">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:50.810213" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:50.810868" elapsed="0.000053"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:50.811347" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:50.791262" elapsed="0.020341">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:51.829852" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:51.829295" elapsed="0.000638">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:51.828356" elapsed="0.001811">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:51.830273" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:51.821603" elapsed="0.008766"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:51.820763" elapsed="0.009817">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:51.831101" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:51.831602" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:51.832105" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:51.812317" elapsed="0.020017">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:52.850226" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:52.849673" elapsed="0.000698">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:52.848597" elapsed="0.002121">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:52.850839" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:52.841970" elapsed="0.008971"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:52.841098" elapsed="0.010096">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:52.851804" elapsed="0.000056"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:52.852298" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:52.852820" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:52.833043" elapsed="0.020011">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:53.871317" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:53.870824" elapsed="0.000569">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:53.869885" elapsed="0.001757">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:53.871776" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:53.863126" elapsed="0.008747"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:53.862140" elapsed="0.009923">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:53.872579" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:53.873089" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:53.873571" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:53.853731" elapsed="0.020102">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:54.891233" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:54.890741" elapsed="0.000570">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:54.889803" elapsed="0.001741">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:54.891674" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:54.883224" elapsed="0.008579"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:54.882319" elapsed="0.009679">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:54.892520" elapsed="0.000080"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:54.893096" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:54.893589" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:54.874481" elapsed="0.019376">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:55.911725" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:55.911186" elapsed="0.000617">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:55.910247" elapsed="0.001785">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:55.912139" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:55.903743" elapsed="0.008491"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:55.902875" elapsed="0.009647">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:55.913062" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:55.913542" elapsed="0.000071"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:55.914072" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:55.894485" elapsed="0.019824">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:56.932472" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:56.931966" elapsed="0.000586">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:56.931033" elapsed="0.001821">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:56.932967" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:56.924437" elapsed="0.008630"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:56.923524" elapsed="0.009734">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:56.933805" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:56.934292" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:56.934815" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:56.915190" elapsed="0.019860">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:57.955292" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:57.954741" elapsed="0.000640">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:57.953731" elapsed="0.001971">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:57.955829" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:57.946440" elapsed="0.009497"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:57.945458" elapsed="0.010683">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:57.956757" elapsed="0.000053"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:57.957280" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:57.957801" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:57.935952" elapsed="0.022199">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:58.976760" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:58.975997" elapsed="0.000852">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:58.975052" elapsed="0.002053">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:58.977219" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:58.968073" elapsed="0.009246"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:58.967179" elapsed="0.010329">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:58.978123" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:58.978665" elapsed="0.000081"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:58.979204" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:58.959037" elapsed="0.020401">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:31:59.998090" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:31:59.997532" elapsed="0.000639">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:59.996601" elapsed="0.001814">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:31:59.998526" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:31:59.990088" elapsed="0.008559"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:31:59.989205" elapsed="0.009667">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:59.999375" elapsed="0.000045"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:31:59.999917" elapsed="0.000051"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:00.000389" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:31:59.980290" elapsed="0.020353">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:32:01.019391" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:32:01.018848" elapsed="0.000625">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:32:01.017838" elapsed="0.001930">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:32:01.020011" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:32:01.011229" elapsed="0.008886"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:32:01.010361" elapsed="0.009945">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:01.020875" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:01.021359" elapsed="0.000050"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:01.021908" elapsed="0.000049"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:32:01.002351" elapsed="0.019790">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:32:02.040866" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:32:02.040306" elapsed="0.000647">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:32:02.039361" elapsed="0.001850">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:32:02.041321" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:32:02.032576" elapsed="0.008845"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:32:02.031712" elapsed="0.009894">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:02.042170" elapsed="0.000046"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:02.042672" elapsed="0.000078"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:02.043172" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:32:02.023053" elapsed="0.020349">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:32:03.061834" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:32:03.061221" elapsed="0.000702">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:32:03.060266" elapsed="0.001924">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:32:03.062310" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:32:03.053467" elapsed="0.008945"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:32:03.052581" elapsed="0.010020">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:03.063159" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:03.063644" elapsed="0.000095"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:03.064291" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:32:03.044287" elapsed="0.020235">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:32:04.083440" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:32:04.082930" elapsed="0.000598">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:32:04.082002" elapsed="0.001924">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:32:04.084046" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:32:04.075373" elapsed="0.008776"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:32:04.074404" elapsed="0.009934">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:04.084899" elapsed="0.000048"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:04.085389" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:04.085905" elapsed="0.000047"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:32:04.065375" elapsed="0.020762">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-10-06T01:32:05.104744" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-10-06T01:32:05.104174" elapsed="0.000657">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:32:05.103006" elapsed="0.002076">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:32:05.105191" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</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="FAIL" start="2026-10-06T01:32:05.096260" elapsed="0.009031"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-10-06T01:32:05.095376" elapsed="0.010105">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.106038" elapsed="0.000047"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.106522" elapsed="0.000049"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.107037" elapsed="0.000048"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:32:05.086953" elapsed="0.020316">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-10-06T01:32:05.107444" level="FAIL">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>90s</arg>
<arg>1s</arg>
<arg>Check Ovsdb Shards Status</arg>
<arg>${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-10-06T01:30:34.185512" elapsed="90.922152">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<doc>Check Shard Status after some cluster event.</doc>
<status status="FAIL" start="2026-10-06T01:30:34.185137" elapsed="90.922897">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<doc>Create original cluster list and check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-10-06T01:30:33.827585" elapsed="91.280736">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</test>
<test id="s1-s2-s2-t25" name="Check Entity Owner Status After Recover" line="126">
<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-10-06T01:32:05.112344" elapsed="0.000521"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:32:05.111533" elapsed="0.001446"/>
</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-10-06T01:32:05.115158" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:05.114900" elapsed="0.000357"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.114851" elapsed="0.000455"/>
</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-10-06T01:32:05.119841" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:05.119591" elapsed="0.000345"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.119551" elapsed="0.000432"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:32:05.122136" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:32:05.121287" elapsed="0.000910"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:32:05.123251" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:32:05.122575" elapsed="0.000730"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:32:05.123397" elapsed="0.000060"/>
</return>
<msg time="2026-10-06T01:32:05.123729" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:32:05.120439" elapsed="0.003347"/>
</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-10-06T01:32:05.129352" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:05.129162" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.129123" elapsed="0.000371"/>
</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-10-06T01:32:05.132267" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:05.132077" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.132038" elapsed="0.000372"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:05.133308" level="INFO">${karaf_connection_index} = 600</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-10-06T01:32:05.132784" elapsed="0.000578"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:05.134212" 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-10-06T01:32:05.133789" elapsed="0.000477"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:05.169635" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:05.135310" elapsed="0.034877"/>
</kw>
<msg time="2026-10-06T01:32:05.170633" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:05.170792" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.134670" elapsed="0.036204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:05.242579" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:05.173008" elapsed="0.069813"/>
</kw>
<msg time="2026-10-06T01:32:05.243009" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:05.243053" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.171350" elapsed="0.071740"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.243453" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:05.243191" elapsed="0.000406"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.243162" elapsed="0.000466"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:05.244277" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:05.243843" elapsed="0.000521"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.244636" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:05.244428" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.244410" elapsed="0.000348"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:05.244794" elapsed="0.000041"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:05.247486" elapsed="0.000513"/>
</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-10-06T01:32:05.249318" elapsed="0.000515"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:05.251039" elapsed="0.000322"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:05.245721" elapsed="0.005709"/>
</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-10-06T01:32:05.245140" elapsed="0.006413"/>
</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="PASS" start="2026-10-06T01:32:05.131401" elapsed="0.120231"/>
</kw>
<msg time="2026-10-06T01:32:05.251808" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:05.251849" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.129870" elapsed="0.122017"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:05.252051" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:32:05.251959" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.251941" elapsed="0.000188"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:32:05.252479" elapsed="0.000024"/>
</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-10-06T01:32:05.252826" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:05.252892" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:32:05.128458" elapsed="0.124521"/>
</kw>
<msg time="2026-10-06T01:32:05.253066" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:05.253107" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.124589" elapsed="0.128554"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.253433" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:05.253213" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.253198" elapsed="0.000306"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:32:05.124274" elapsed="0.129251"/>
</iter>
<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-10-06T01:32:05.256263" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:05.256176" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.256158" elapsed="0.000167"/>
</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-10-06T01:32:05.257426" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:05.257340" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.257323" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:05.257897" level="INFO">${karaf_connection_index} = 602</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-10-06T01:32:05.257634" elapsed="0.000288"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:05.258312" 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-10-06T01:32:05.258085" elapsed="0.000251"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:05.293979" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:05.258945" elapsed="0.035545"/>
</kw>
<msg time="2026-10-06T01:32:05.295028" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:05.295135" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.258491" elapsed="0.036730"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:05.369004" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:05.297068" elapsed="0.072171"/>
</kw>
<msg time="2026-10-06T01:32:05.369430" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:05.369472" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.295851" elapsed="0.073658"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.369934" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:05.369610" elapsed="0.000402"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.369583" elapsed="0.000458"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:05.370662" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:05.370228" elapsed="0.000563"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.371075" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:05.370856" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.370839" elapsed="0.000339"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:05.371215" elapsed="0.000038"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:05.376007" elapsed="0.000502"/>
</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-10-06T01:32:05.377830" elapsed="0.000480"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:05.379570" elapsed="0.000396"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:05.374168" elapsed="0.005870"/>
</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-10-06T01:32:05.371555" elapsed="0.008604"/>
</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="PASS" start="2026-10-06T01:32:05.257081" elapsed="0.123158"/>
</kw>
<msg time="2026-10-06T01:32:05.380326" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:05.380365" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.256472" elapsed="0.123929"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:05.380561" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:32:05.380474" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.380456" elapsed="0.000186"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.381054" elapsed="0.000025"/>
</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-10-06T01:32:05.381361" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:05.381426" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:32:05.255643" elapsed="0.125929"/>
</kw>
<msg time="2026-10-06T01:32:05.381659" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:05.381970" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.253825" elapsed="0.128184"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.382303" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:05.382081" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.382065" elapsed="0.000309"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:32:05.253655" elapsed="0.128740"/>
</iter>
<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-10-06T01:32:05.384839" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:05.384752" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.384733" elapsed="0.000170"/>
</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-10-06T01:32:05.386006" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:05.385921" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.385905" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:05.386465" level="INFO">${karaf_connection_index} = 604</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-10-06T01:32:05.386214" elapsed="0.000276"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:05.386872" 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-10-06T01:32:05.386652" elapsed="0.000245"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:05.419913" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:05.387468" elapsed="0.032622"/>
</kw>
<msg time="2026-10-06T01:32:05.420249" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:05.420291" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.387052" elapsed="0.033274"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:05.496670" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:05.420948" elapsed="0.075946"/>
</kw>
<msg time="2026-10-06T01:32:05.497061" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:05.497102" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.420491" elapsed="0.076647"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.497445" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:05.497218" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.497195" elapsed="0.000351"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:05.498151" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "h "e "c "k "[C "E "n "t "i "t "y "[C "O "w "n "e "r "[C "[78CS "[A[78Ct
 "a "t "u "s "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:05.497763" elapsed="0.000475"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.498516" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:05.498314" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.498297" elapsed="0.000315"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:05.498644" elapsed="0.000062"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:05.501277" elapsed="0.000530"/>
</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-10-06T01:32:05.503229" elapsed="0.000568"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:05.505217" elapsed="0.040346"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:05.499499" elapsed="0.046219"/>
</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-10-06T01:32:05.498987" elapsed="0.046861"/>
</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="PASS" start="2026-10-06T01:32:05.385627" elapsed="0.160331"/>
</kw>
<msg time="2026-10-06T01:32:05.546059" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:05.546104" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.385051" elapsed="0.161090"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:05.546362" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-10-06T01:32:05.546242" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.546208" elapsed="0.000267"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.546905" elapsed="0.000030"/>
</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-10-06T01:32:05.547216" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:05.547281" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:32:05.384422" elapsed="0.162948"/>
</kw>
<msg time="2026-10-06T01:32:05.547456" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:05.547496" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.382667" elapsed="0.164863"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.547878" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:05.547600" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.547584" elapsed="0.000368"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:32:05.382527" elapsed="0.165447"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:32:05.123906" elapsed="0.424099"/>
</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-10-06T01:32:05.118916" elapsed="0.429142"/>
</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-10-06T01:32:05.114245" elapsed="0.433863"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.113305" elapsed="0.434845"/>
</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-10-06T01:32:05.110350" elapsed="0.437848"/>
</kw>
<kw name="Get Ovsdb Entity Owner Status For One Device" owner="ClusterOvsdb">
<msg time="2026-10-06T01:32:05.552183" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<var>${new_owner}</var>
<var>${new_candidate_list}</var>
<arg>ovsdb://uuid/${ovsdb_uuid}</arg>
<arg>1</arg>
<doc>Check Entity Owner Status and identify owner and successors for an ovs device ${device}. Request is sent to controller ${controller_index}.</doc>
<status status="FAIL" start="2026-10-06T01:32:05.550955" elapsed="0.001264">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_owner}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.552426" elapsed="0.000020"/>
</kw>
<doc>Check Entity Owner Status and identify owner and candidate.</doc>
<status status="FAIL" start="2026-10-06T01:32:05.109164" elapsed="0.443417">Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s2-s2-t26" name="Create Bridge Manually and Verify After Recover" line="133">
<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-10-06T01:32:05.554158" elapsed="0.000242"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:32:05.553911" elapsed="0.000540"/>
</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-10-06T01:32:05.555560" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:05.555473" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.555456" elapsed="0.000167"/>
</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-10-06T01:32:05.557672" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:05.557588" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.557571" elapsed="0.000243"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:32:05.558748" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:32:05.558386" elapsed="0.000388"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:32:05.559258" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:32:05.558926" elapsed="0.000360"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:32:05.559328" elapsed="0.000028"/>
</return>
<msg time="2026-10-06T01:32:05.559458" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:32:05.558026" elapsed="0.001455"/>
</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-10-06T01:32:05.561910" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:05.561825" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.561808" elapsed="0.000166"/>
</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-10-06T01:32:05.563083" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:05.562999" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.562982" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:05.563520" level="INFO">${karaf_connection_index} = 600</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-10-06T01:32:05.563289" elapsed="0.000256"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:05.563925" 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-10-06T01:32:05.563737" elapsed="0.000212"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:05.595971" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:05.564512" elapsed="0.031651"/>
</kw>
<msg time="2026-10-06T01:32:05.596322" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:05.596363" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.564103" elapsed="0.032294"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:05.671640" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:05.597022" elapsed="0.074894"/>
</kw>
<msg time="2026-10-06T01:32:05.672104" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:05.672147" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.596560" elapsed="0.075624"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.672531" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:05.672272" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.672247" elapsed="0.000390"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:05.673251" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:05.672869" elapsed="0.000468"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.673595" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:05.673399" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.673382" elapsed="0.000348"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:05.673764" elapsed="0.000035"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:05.676425" elapsed="0.000711"/>
</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-10-06T01:32:05.678456" elapsed="0.000639"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:05.680284" elapsed="0.000312"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:05.674627" elapsed="0.006039"/>
</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-10-06T01:32:05.674084" elapsed="0.006797"/>
</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="PASS" start="2026-10-06T01:32:05.562739" elapsed="0.118219"/>
</kw>
<msg time="2026-10-06T01:32:05.681042" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:05.681081" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.562120" elapsed="0.118995"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:05.681270" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:32:05.681185" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.681168" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:32:05.681708" elapsed="0.000025"/>
</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-10-06T01:32:05.682018" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:05.682082" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:32:05.561511" elapsed="0.120655"/>
</kw>
<msg time="2026-10-06T01:32:05.682250" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:05.682291" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.559856" elapsed="0.122470"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.682631" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:05.682396" elapsed="0.000425"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.682379" elapsed="0.000467"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:32:05.559712" elapsed="0.123156"/>
</iter>
<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-10-06T01:32:05.685283" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:05.685198" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.685180" elapsed="0.000165"/>
</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-10-06T01:32:05.686439" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:05.686351" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.686334" elapsed="0.000178"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:05.686942" level="INFO">${karaf_connection_index} = 602</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-10-06T01:32:05.686656" elapsed="0.000311"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:05.687312" 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-10-06T01:32:05.687130" elapsed="0.000207"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:05.720929" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:05.687933" elapsed="0.033176"/>
</kw>
<msg time="2026-10-06T01:32:05.721271" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:05.721314" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.687489" elapsed="0.033863"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:05.803275" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:05.722027" elapsed="0.081628"/>
</kw>
<msg time="2026-10-06T01:32:05.803924" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:05.803967" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.721533" elapsed="0.082469"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.804434" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:05.804133" elapsed="0.000378"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.804095" elapsed="0.000444"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:05.805177" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:05.804752" elapsed="0.000511"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.805525" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:05.805326" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.805309" elapsed="0.000309"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:05.805653" elapsed="0.000075"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:05.808392" elapsed="0.000529"/>
</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-10-06T01:32:05.810357" elapsed="0.000808"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:05.812499" elapsed="0.000344"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:05.806589" elapsed="0.006325"/>
</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-10-06T01:32:05.806031" elapsed="0.007001"/>
</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="PASS" start="2026-10-06T01:32:05.686094" elapsed="0.127016"/>
</kw>
<msg time="2026-10-06T01:32:05.813192" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:05.813231" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.685491" elapsed="0.127776"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:05.813423" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:32:05.813338" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.813320" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.813913" elapsed="0.000025"/>
</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-10-06T01:32:05.814222" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:05.814287" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:32:05.684902" elapsed="0.129470"/>
</kw>
<msg time="2026-10-06T01:32:05.814466" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:05.814511" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.683132" elapsed="0.131414"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.814867" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:05.814619" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.814602" elapsed="0.000337"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:32:05.682988" elapsed="0.131973"/>
</iter>
<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-10-06T01:32:05.817445" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:05.817361" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.817343" 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-10-06T01:32:05.818666" elapsed="0.000066"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:05.818579" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.818561" elapsed="0.000224"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:05.819169" level="INFO">${karaf_connection_index} = 604</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-10-06T01:32:05.818933" elapsed="0.000261"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:05.819537" 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-10-06T01:32:05.819353" elapsed="0.000208"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:05.852331" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:05.820162" elapsed="0.032346"/>
</kw>
<msg time="2026-10-06T01:32:05.852713" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:05.852757" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.819745" elapsed="0.033047"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:05.927797" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:05.853376" elapsed="0.074612"/>
</kw>
<msg time="2026-10-06T01:32:05.928146" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:05.928187" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.852957" elapsed="0.075265"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.928499" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:05.928294" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.928275" elapsed="0.000318"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:05.929153" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "M "a "n "u "a "[78Cl "[A[78Cl
 "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:05.928817" elapsed="0.000421"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.929496" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:05.929299" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.929282" elapsed="0.000311"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:05.929624" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:05.932092" elapsed="0.000469"/>
</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-10-06T01:32:05.933784" elapsed="0.000582"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:05.935540" elapsed="0.000345"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:05.930425" elapsed="0.005528"/>
</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-10-06T01:32:05.929935" elapsed="0.006132"/>
</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="PASS" start="2026-10-06T01:32:05.818303" elapsed="0.117841"/>
</kw>
<msg time="2026-10-06T01:32:05.936226" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:05.936265" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.817724" elapsed="0.118577"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:05.936457" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:32:05.936372" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.936354" elapsed="0.000213"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.937190" elapsed="0.000025"/>
</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-10-06T01:32:05.937492" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:05.937557" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:32:05.817064" elapsed="0.120577"/>
</kw>
<msg time="2026-10-06T01:32:05.937753" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:05.937794" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.815221" elapsed="0.122608"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.938116" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:05.937897" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.937881" elapsed="0.000306"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:32:05.815082" elapsed="0.123126"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:32:05.559535" elapsed="0.378702"/>
</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-10-06T01:32:05.557290" elapsed="0.381003"/>
</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-10-06T01:32:05.555197" elapsed="0.383150"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:05.554597" elapsed="0.383795"/>
</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-10-06T01:32:05.553516" elapsed="0.384927"/>
</kw>
<kw name="Create Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:05.941888" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:05.941625" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:05.941607" elapsed="0.000356"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:05.942284" 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-10-06T01:32:05.942375" 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-10-06T01:32:05.942154" elapsed="0.000246"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:05.942912" level="INFO">Attempting to execute command "sudo ovs-vsctl add-br br-s1" on remote system "10.30.170.234" 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-10-06T01:32:05.942593" elapsed="0.000362"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:05.943429" level="INFO">${conn_id} = 703</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-10-06T01:32:05.943129" elapsed="0.000323"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:32:05.944325" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:32:05.944397" 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-10-06T01:32:05.944040" elapsed="0.000380"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:05.944570" elapsed="0.000322"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:32:05.945653" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:32:06.544984" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:32:06 UTC 2026

  System load:  0.01               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:30:21 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:32:05.945419" elapsed="0.599805"/>
</kw>
<msg time="2026-10-06T01:32:06.545322" 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-10-06T01:32:05.945056" elapsed="0.600357"/>
</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-10-06T01:32:05.943645" elapsed="0.601894"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:32:06.546161" level="INFO">Executing command 'sudo ovs-vsctl add-br br-s1'.</msg>
<msg time="2026-10-06T01:32:06.599483" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:32:06.599834" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:32:06.599932" level="INFO">${stderr} = </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-10-06T01:32:06.545911" elapsed="0.054073"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:06.600392" elapsed="0.000579"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.602179" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.601485" elapsed="0.000797"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:32:06.602869" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:06.602460" elapsed="0.000528"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.602405" elapsed="0.000634"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:32:06.603350" elapsed="0.000061"/>
</return>
<status status="PASS" start="2026-10-06T01:32:06.603150" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.603120" elapsed="0.000410"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:32:06.603598" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:06.605312" elapsed="0.000698"/>
</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-10-06T01:32:06.606423" elapsed="0.000412"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:06.607156" elapsed="0.000199"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:06.604331" elapsed="0.003129"/>
</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-10-06T01:32:05.941209" elapsed="0.666404"/>
</kw>
<msg time="2026-10-06T01:32:06.607771" 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-10-06T01:32:05.940658" elapsed="0.667220"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:32:05.940246" elapsed="0.667789"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.609172" level="INFO">${dictionary_operational} = {'br-s1': '5'}</msg>
<var>${dictionary_operational}</var>
<arg>br-s1=5</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:32:06.608458" elapsed="0.000769"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.610326" level="INFO">${dictionary_config} = {'br-s1': '0'}</msg>
<var>${dictionary_config}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:32:06.609649" elapsed="0.000732"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.620862" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:32:06.620063" elapsed="0.000870"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.622079" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:32:06.621306" elapsed="0.000828"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:32:06.622226" elapsed="0.000061"/>
</return>
<msg time="2026-10-06T01:32:06.622545" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:32:06.619153" elapsed="0.003449"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.627952" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:32:06.627534" elapsed="0.000453"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:32:06.628118" elapsed="0.000039"/>
</return>
<msg time="2026-10-06T01:32:06.628296" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:32:06.627088" elapsed="0.001241"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.630248" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.629650" elapsed="0.000658"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.630957" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.630573" elapsed="0.000441"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:32:06.642920" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:32:06.643120" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '144'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:32:06.643274" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:32:06.631467" elapsed="0.011842"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.631123" elapsed="0.012241"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.643613" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:06.643398" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.631094" elapsed="0.012674"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.645570" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.645088" elapsed="0.000548"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.644751" elapsed="0.000982"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.644724" elapsed="0.001047"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.646587" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.646179" elapsed="0.000468"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.645844" elapsed="0.000885"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.645822" elapsed="0.000941"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.647515" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:06.647004" elapsed="0.000546"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.647964" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:06.647639" elapsed="0.000397"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.648651" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:06.648285" elapsed="0.000434"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.648067" elapsed="0.000699"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.647616" elapsed="0.001179"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.649495" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:06.649028" elapsed="0.000501"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.649939" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:06.649617" elapsed="0.000394"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.650627" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:06.650256" elapsed="0.000404"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.650042" elapsed="0.000699"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.649594" elapsed="0.001177"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:06.650965" elapsed="0.000431"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:32:06.651995" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:06.651623" elapsed="0.000408"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:32:06.652241" elapsed="0.000296"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:32:06.644237" elapsed="0.008430"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:32:06.652949" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-10-06T01:32:06.652832" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.652807" elapsed="0.000252"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.653254" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:32:06.653342" elapsed="0.000021"/>
</return>
<msg time="2026-10-06T01:32:06.653642" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:32:06.628804" elapsed="0.024897"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:32:06.653783" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:32:06.653954" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:32:06.626296" elapsed="0.027693"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.655458" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:32:06.655023" elapsed="0.000523"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:32:06.654798" elapsed="0.000799"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:32:06.654613" elapsed="0.001024"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:32:06.654271" elapsed="0.001471"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:32:06.623037" elapsed="0.032751"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.659482" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:06.659110" elapsed="0.000408"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:32:06.659576" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:32:06.659781" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:32:06.658628" elapsed="0.001186"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.661438" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.661104" elapsed="0.000395"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.662121" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.661806" elapsed="0.000372"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:32:06.678498" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0onugjjevyaz5kav2bikiz01a3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:32:06.678654" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:32:06.678830" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:32:06.662606" elapsed="0.016259"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.662265" elapsed="0.016657"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.679178" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:06.678956" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.662242" elapsed="0.017044"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.681097" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.680592" elapsed="0.000566"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.680260" elapsed="0.000941"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.680235" elapsed="0.000997"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.682080" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.681654" elapsed="0.000540"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.681302" elapsed="0.000940"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.681281" elapsed="0.000992"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.683073" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:06.682535" elapsed="0.000574"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.683482" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:06.683200" elapsed="0.000355"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.684207" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:06.683836" elapsed="0.000405"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.683585" elapsed="0.000703"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.683176" elapsed="0.001140"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.685051" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:06.684547" elapsed="0.000540"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.685455" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:06.685175" elapsed="0.000351"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.686211" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:06.685845" elapsed="0.000401"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.685558" elapsed="0.000735"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.685152" elapsed="0.001169"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:06.686515" elapsed="0.000450"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:32:06.687494" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:06.687183" elapsed="0.000344"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:32:06.687777" elapsed="0.000293"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:32:06.679777" elapsed="0.008370"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:32:06.688348" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-10-06T01:32:06.688234" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.688211" elapsed="0.000248"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.688650" elapsed="0.000076"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:32:06.688793" elapsed="0.000021"/>
</return>
<msg time="2026-10-06T01:32:06.689094" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:32:06.660224" elapsed="0.028905"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:32:06.689193" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:32:06.689361" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:32:06.658048" elapsed="0.031345"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.691162" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:32:06.690720" elapsed="0.000528"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:32:06.690446" elapsed="0.000852"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:32:06.690095" elapsed="0.001242"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:32:06.689775" elapsed="0.001629"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:32:06.655900" elapsed="0.035547"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.695062" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:06.694631" elapsed="0.000465"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:32:06.695156" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:32:06.695379" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:32:06.694168" elapsed="0.001244"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.697108" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.696792" elapsed="0.000374"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.697768" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.697425" elapsed="0.000400"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:32:06.713301" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01ql1g6bmmojox1juom7bkbzdam3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:32:06.713444" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:32:06.713574" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:32:06.698224" elapsed="0.015384"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.697911" elapsed="0.015750"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.713957" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:06.713743" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.697887" elapsed="0.016179"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.715926" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.715434" elapsed="0.000551"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.715104" elapsed="0.000924"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.715079" elapsed="0.000980"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.716876" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.716455" elapsed="0.000479"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.716129" elapsed="0.000848"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.716108" elapsed="0.000899"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.717748" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:06.717239" elapsed="0.000546"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.718155" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:06.717874" elapsed="0.000353"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.718913" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:06.718473" elapsed="0.000475"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.718258" elapsed="0.000737"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.717851" elapsed="0.001172"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.719756" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:06.719255" elapsed="0.000538"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.720163" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:06.719883" elapsed="0.000352"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.720881" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:06.720481" elapsed="0.000434"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.720267" elapsed="0.000707"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.719859" elapsed="0.001155"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:06.721214" elapsed="0.000406"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:32:06.722176" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:06.721873" elapsed="0.000338"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:32:06.722416" elapsed="0.000354"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:32:06.714558" elapsed="0.008292"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:32:06.723099" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-10-06T01:32:06.722983" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.722958" elapsed="0.000251"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.723401" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:32:06.723489" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:32:06.723826" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:32:06.695897" elapsed="0.027965"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:32:06.723927" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:32:06.724097" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:32:06.693560" elapsed="0.030570"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.725796" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:32:06.725334" elapsed="0.000547"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:32:06.725114" elapsed="0.000818"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:32:06.724968" elapsed="0.001002"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:32:06.724410" elapsed="0.001628"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:32:06.691558" elapsed="0.034524"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:32:06.622771" elapsed="0.103347"/>
</for>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:32:06.618025" elapsed="0.108159"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:32:06.610906" elapsed="0.115347"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.732647" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:32:06.732196" elapsed="0.000507"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.733305" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:32:06.732931" elapsed="0.000408"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:32:06.733396" elapsed="0.000046"/>
</return>
<msg time="2026-10-06T01:32:06.733604" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:32:06.731653" elapsed="0.001985"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.737481" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:32:06.737110" elapsed="0.000405"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:32:06.737575" elapsed="0.000043"/>
</return>
<msg time="2026-10-06T01:32:06.737790" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:32:06.736630" elapsed="0.001193"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.739359" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.739139" elapsed="0.000261"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.739833" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.739584" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:32:06.746836" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:32:06.747033" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '5397'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;52328644-d3e6-48b0-bfd7-71e8d0b07579&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;74c4805a-3d8d-489f-91c1-aec7d1c82842&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;a97d6f5d-1992-4b3c-aaa5-49f051292349&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;46:86:32:52:b0:48&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;18&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:46:86:32:52:b0:48&lt;/datapath-id&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:32:06.747192" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:32:06.740158" elapsed="0.007059"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.739933" elapsed="0.007323"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.747430" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:06.747280" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.739916" elapsed="0.007593"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.748845" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;52328644-d3e6-48b0-bfd7-71e8d0b07579&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;74c4805a-3d8d-489f-91c1-aec7d1c82842&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;a97d6f5d-1992-4b3c-aaa5-49f051292349&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;46:86:32:52:b0:48&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;18&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:46:86:32:52:b0:48&lt;/datapath-id&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.748434" elapsed="0.000556"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.748196" elapsed="0.000827"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.748179" elapsed="0.000868"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.749604" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.749336" elapsed="0.000310"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.749099" elapsed="0.000593"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.749084" elapsed="0.000643"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.750373" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:06.749898" elapsed="0.000502"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.750668" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:06.750465" elapsed="0.000284"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.751195" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:06.750931" elapsed="0.000289"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.750772" elapsed="0.000486"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.750448" elapsed="0.000839"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.751883" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:06.751489" elapsed="0.000421"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.752179" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:06.751975" elapsed="0.000257"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.752671" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:06.752410" elapsed="0.000332"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.752254" elapsed="0.000522"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.751958" elapsed="0.000839"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:06.752937" elapsed="0.000293"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:32:06.753602" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:06.753385" elapsed="0.000241"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:32:06.753800" elapsed="0.000211"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:32:06.747856" elapsed="0.006211"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:32:06.754209" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:32:06.754129" elapsed="0.000136"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.754112" elapsed="0.000176"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.754425" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:32:06.754502" elapsed="0.000017"/>
</return>
<msg time="2026-10-06T01:32:06.754812" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:32:06.738230" elapsed="0.016610"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:32:06.754887" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:32:06.755009" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:32:06.736059" elapsed="0.018976"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.756061" level="INFO">Item found from container 5 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:32:06.755752" elapsed="0.000392"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:32:06.755564" elapsed="0.000615"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:32:06.755460" elapsed="0.000746"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:32:06.755236" elapsed="0.001018"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:32:06.733899" elapsed="0.022421"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.758889" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:06.758582" elapsed="0.000333"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:32:06.758956" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:32:06.759079" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:32:06.758264" elapsed="0.000837"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.760258" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.760038" elapsed="0.000261"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.760731" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.760485" elapsed="0.000288"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:32:06.771081" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0onugjjevyaz5kav2bikiz01a3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:32:06.771223" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2408'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":41758,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"52328644-d3e6-48b0-bfd7-71e8d0b07579","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"74c4805a-3d8d-489f-91c1-aec7d1c82842","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"a97d6f5d-1992-4b3c-aaa5-49f051292349","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"46:86:32:52:b0:48","ovsdb:ofport":65534,"ovsdb:ifindex":18}],"ovsdb:datapath-id":"00:00:46:86:32:52:b0:48"}]}]}} 
 </msg>
<msg time="2026-10-06T01:32:06.771327" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:32:06.761058" elapsed="0.010294"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.760834" elapsed="0.010559"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.771606" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:06.771417" elapsed="0.000251"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.760817" elapsed="0.010908"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.773190" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":41758,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"52328644-d3e6-48b0-bfd7-71e8d0b07579","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"74c4805a-3d8d-489f-91c1-aec7d1c82842","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"a97d6f5d-1992-4b3c-aaa5-49f051292349","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"46:86:32:52:b0:48","ovsdb:ofport":65534,"ovsdb:ifindex":18}],"ovsdb:datapath-id":"00:00:46:86:32:52:b0:48"}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.772646" elapsed="0.000636"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.772402" elapsed="0.000914"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.772383" elapsed="0.000956"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.773955" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.773627" elapsed="0.000370"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.773390" elapsed="0.000638"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.773375" elapsed="0.000676"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.774591" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:06.774220" elapsed="0.000396"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.774918" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:06.774697" elapsed="0.000275"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.775411" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:06.775148" elapsed="0.000287"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.774994" elapsed="0.000474"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.774664" elapsed="0.000824"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.776026" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:06.775659" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.776315" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:06.776115" elapsed="0.000252"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.776832" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:06.776541" elapsed="0.000315"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.776389" elapsed="0.000500"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.776099" elapsed="0.000810"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:06.777047" elapsed="0.000291"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:32:06.777742" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:06.777494" elapsed="0.000273"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:32:06.777915" elapsed="0.000207"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:32:06.772053" elapsed="0.006126"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:32:06.778320" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:32:06.778240" elapsed="0.000137"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.778223" elapsed="0.000176"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.778536" elapsed="0.000019"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:32:06.778604" elapsed="0.000015"/>
</return>
<msg time="2026-10-06T01:32:06.778879" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:32:06.759395" elapsed="0.019510"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:32:06.778950" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:32:06.779070" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:32:06.757854" elapsed="0.021241"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.780117" level="INFO">Item found from container 5 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:32:06.779810" elapsed="0.000378"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:32:06.779621" elapsed="0.000603"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:32:06.779518" elapsed="0.000733"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:32:06.779295" elapsed="0.001003"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:32:06.756401" elapsed="0.023962"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.782984" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:06.782701" elapsed="0.000309"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:32:06.783051" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:32:06.783174" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:32:06.782338" elapsed="0.000859"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.784366" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.784143" elapsed="0.000265"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.784933" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.784637" elapsed="0.000339"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:32:06.796726" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01ql1g6bmmojox1juom7bkbzdam3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:32:06.796862" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2408'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":41758,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"52328644-d3e6-48b0-bfd7-71e8d0b07579","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"74c4805a-3d8d-489f-91c1-aec7d1c82842","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"a97d6f5d-1992-4b3c-aaa5-49f051292349","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"46:86:32:52:b0:48","ovsdb:ofport":65534,"ovsdb:ifindex":18}],"ovsdb:datapath-id":"00:00:46:86:32:52:b0:48"}]}]}} 
 </msg>
<msg time="2026-10-06T01:32:06.796963" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:32:06.785268" elapsed="0.011719"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.785038" elapsed="0.011988"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.797200" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:06.797050" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.785021" elapsed="0.012257"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.800020" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":41758,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"52328644-d3e6-48b0-bfd7-71e8d0b07579","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"74c4805a-3d8d-489f-91c1-aec7d1c82842","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"a97d6f5d-1992-4b3c-aaa5-49f051292349","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"46:86:32:52:b0:48","ovsdb:ofport":65534,"ovsdb:ifindex":18}],"ovsdb:datapath-id":"00:00:46:86:32:52:b0:48"}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.799628" elapsed="0.000480"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.799377" elapsed="0.000764"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.799353" elapsed="0.000810"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.800796" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.800448" elapsed="0.000392"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.800214" elapsed="0.000656"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.800199" elapsed="0.000694"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.801406" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:06.801062" elapsed="0.000369"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.801729" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:06.801495" elapsed="0.000290"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.802230" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:06.801964" elapsed="0.000291"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.801808" elapsed="0.000486"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.801478" elapsed="0.000846"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.802884" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:06.802512" elapsed="0.000397"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.803172" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:06.802973" elapsed="0.000251"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.803663" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:06.803400" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:06.803246" elapsed="0.000506"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.802956" elapsed="0.000816"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:06.803913" elapsed="0.000291"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:32:06.804574" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:06.804357" elapsed="0.000241"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:32:06.804772" elapsed="0.000210"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:32:06.797602" elapsed="0.007436"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:32:06.805178" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:32:06.805099" elapsed="0.000134"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.805083" elapsed="0.000173"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.805394" elapsed="0.000019"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:32:06.805455" elapsed="0.000015"/>
</return>
<msg time="2026-10-06T01:32:06.806032" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:32:06.783494" elapsed="0.022568"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:32:06.806109" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:32:06.806236" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:32:06.781921" elapsed="0.024338"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.807389" level="INFO">Item found from container 5 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:32:06.807087" elapsed="0.000373"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:32:06.806930" elapsed="0.000566"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:32:06.806824" elapsed="0.000699"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:32:06.806463" elapsed="0.001111"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:32:06.780446" elapsed="0.027210"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:32:06.733743" elapsed="0.073960"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:32:06.730848" elapsed="0.076918"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:32:06.726535" elapsed="0.081277"/>
</kw>
<doc>Create bridge br-s1 using OVS command and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:32:05.939879" elapsed="0.867988"/>
</kw>
<doc>Create bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="PASS" start="2026-10-06T01:32:05.552967" elapsed="1.255006"/>
</test>
<test id="s1-s2-s2-t27" name="Add Port Manually and Verify After Recover" line="137">
<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-10-06T01:32:06.809447" elapsed="0.000198"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:32:06.809204" elapsed="0.000520"/>
</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-10-06T01:32:06.810618" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:06.810530" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.810512" elapsed="0.000192"/>
</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-10-06T01:32:06.812781" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:06.812668" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.812651" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.813752" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:32:06.813401" elapsed="0.000378"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.814198" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:32:06.813927" elapsed="0.000295"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:32:06.814262" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:32:06.814387" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:32:06.813046" elapsed="0.001365"/>
</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-10-06T01:32:06.816922" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:06.816838" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.816820" elapsed="0.000165"/>
</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-10-06T01:32:06.818148" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:06.818064" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.818047" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:06.818595" level="INFO">${karaf_connection_index} = 600</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-10-06T01:32:06.818354" elapsed="0.000266"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:06.819012" 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-10-06T01:32:06.818818" elapsed="0.000218"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:06.861180" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:06.819601" elapsed="0.041795"/>
</kw>
<msg time="2026-10-06T01:32:06.861564" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:06.861606" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:06.819191" elapsed="0.042450"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:06.937955" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:06.862305" elapsed="0.075842"/>
</kw>
<msg time="2026-10-06T01:32:06.938363" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:06.938407" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:06.861871" elapsed="0.076572"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.938825" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:06.938540" elapsed="0.000382"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.938511" elapsed="0.000448"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:06.939559" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:06.939159" elapsed="0.000544"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.940022" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:06.939809" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.939783" elapsed="0.000338"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:06.940155" elapsed="0.000034"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:06.942939" elapsed="0.000488"/>
</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-10-06T01:32:06.944661" elapsed="0.000712"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:06.946596" elapsed="0.000565"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:06.941084" elapsed="0.006146"/>
</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-10-06T01:32:06.940462" elapsed="0.006885"/>
</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="PASS" start="2026-10-06T01:32:06.817808" elapsed="0.129616"/>
</kw>
<msg time="2026-10-06T01:32:06.947509" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:06.947548" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:06.817132" elapsed="0.130452"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:06.947767" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:32:06.947653" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.947636" elapsed="0.000211"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:32:06.948186" elapsed="0.000023"/>
</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-10-06T01:32:06.948494" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:06.948558" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:32:06.816519" elapsed="0.132123"/>
</kw>
<msg time="2026-10-06T01:32:06.948788" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:06.948828" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:06.814807" elapsed="0.134057"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:06.949152" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:06.948933" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.948917" elapsed="0.000306"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:32:06.814608" elapsed="0.134636"/>
</iter>
<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-10-06T01:32:06.951820" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:06.951729" elapsed="0.000133"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.951660" elapsed="0.000223"/>
</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-10-06T01:32:06.953040" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:06.952954" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:06.952937" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:06.953476" level="INFO">${karaf_connection_index} = 602</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-10-06T01:32:06.953247" elapsed="0.000254"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:06.953880" 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-10-06T01:32:06.953661" elapsed="0.000244"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:06.981439" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:06.954481" elapsed="0.027251"/>
</kw>
<msg time="2026-10-06T01:32:06.981978" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:06.982042" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:06.954060" elapsed="0.028038"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:07.034558" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:06.983118" elapsed="0.051719"/>
</kw>
<msg time="2026-10-06T01:32:07.035030" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:07.035073" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:06.982363" elapsed="0.052746"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.035483" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.035210" elapsed="0.000348"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.035180" elapsed="0.000406"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.036192" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.035800" elapsed="0.000480"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.036543" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.036342" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.036325" elapsed="0.000314"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:07.036699" elapsed="0.000051"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:07.039398" elapsed="0.000529"/>
</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-10-06T01:32:07.041201" elapsed="0.000677"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:07.043139" elapsed="0.000534"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:07.037593" elapsed="0.006244"/>
</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-10-06T01:32:07.037048" elapsed="0.006907"/>
</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="PASS" start="2026-10-06T01:32:06.952655" elapsed="0.091378"/>
</kw>
<msg time="2026-10-06T01:32:07.044118" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:07.044158" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:06.952032" elapsed="0.092162"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:07.044349" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:32:07.044264" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.044246" elapsed="0.000182"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.044791" elapsed="0.000085"/>
</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-10-06T01:32:07.045167" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:07.045232" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:32:06.951380" elapsed="0.093937"/>
</kw>
<msg time="2026-10-06T01:32:07.045404" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:07.045444" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:06.949501" elapsed="0.095977"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.045895" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.045548" elapsed="0.000399"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.045532" elapsed="0.000437"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:32:06.949362" elapsed="0.096628"/>
</iter>
<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-10-06T01:32:07.048426" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:07.048341" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.048324" elapsed="0.000165"/>
</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-10-06T01:32:07.049588" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:07.049502" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.049485" elapsed="0.000166"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:07.050086" level="INFO">${karaf_connection_index} = 604</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-10-06T01:32:07.049852" elapsed="0.000259"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:07.050460" 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-10-06T01:32:07.050274" elapsed="0.000209"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:07.081189" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:07.051078" elapsed="0.030293"/>
</kw>
<msg time="2026-10-06T01:32:07.081539" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:07.081584" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:07.050636" elapsed="0.030985"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:07.133917" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:07.082258" elapsed="0.051844"/>
</kw>
<msg time="2026-10-06T01:32:07.134261" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:07.134302" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:07.081822" elapsed="0.052515"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.134624" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.134409" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.134390" elapsed="0.000369"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.135289" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "A "d "d "[C "P "o "r "t "[C "M "a "n "u "a "l "l "y "[C "a "[78Cn "[A[78Cd
 "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.134944" elapsed="0.000432"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.135641" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.135438" elapsed="0.000351"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.135421" elapsed="0.000393"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:07.135847" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:07.138359" elapsed="0.000522"/>
</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-10-06T01:32:07.140111" elapsed="0.000462"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:07.142023" elapsed="0.000465"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:07.136636" elapsed="0.005921"/>
</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-10-06T01:32:07.136131" elapsed="0.006627"/>
</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="PASS" start="2026-10-06T01:32:07.049244" elapsed="0.093599"/>
</kw>
<msg time="2026-10-06T01:32:07.142926" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:07.142966" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:07.048636" elapsed="0.094365"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:07.143161" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:32:07.143073" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.143055" elapsed="0.000184"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.143556" elapsed="0.000024"/>
</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-10-06T01:32:07.143887" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:07.143953" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:32:07.048043" elapsed="0.095996"/>
</kw>
<msg time="2026-10-06T01:32:07.144123" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:07.144163" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:07.046251" elapsed="0.097946"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.144486" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.144266" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.144250" elapsed="0.000307"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:32:07.046113" elapsed="0.098465"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:32:06.814460" elapsed="0.330148"/>
</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-10-06T01:32:06.812370" elapsed="0.332297"/>
</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-10-06T01:32:06.810264" elapsed="0.334590"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:06.809872" elapsed="0.335027"/>
</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-10-06T01:32:06.808863" elapsed="0.336089"/>
</kw>
<kw name="Add Sample Port To The Manual Bridge And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.148510" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.148276" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.148259" elapsed="0.000327"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:07.148956" 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-10-06T01:32:07.149049" 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-10-06T01:32:07.148824" elapsed="0.000249"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.149584" level="INFO">Attempting to execute command "sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan" on remote system "10.30.170.234" 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-10-06T01:32:07.149296" elapsed="0.000331"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:07.150138" level="INFO">${conn_id} = 708</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-10-06T01:32:07.149830" elapsed="0.000332"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.151005" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:32:07.151075" 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-10-06T01:32:07.150740" elapsed="0.000357"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:07.151243" elapsed="0.000280"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:32:07.152302" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:32:07.568255" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:32:06 UTC 2026

  System load:  0.01               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:32:06 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:32:07.152073" elapsed="0.416303"/>
</kw>
<msg time="2026-10-06T01:32:07.568452" 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-10-06T01:32:07.151697" elapsed="0.416831"/>
</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-10-06T01:32:07.150356" elapsed="0.418272"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:32:07.569119" level="INFO">Executing command 'sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan'.</msg>
<msg time="2026-10-06T01:32:07.612472" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:32:07.612766" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:32:07.612863" level="INFO">${stderr} = ovs-vsctl: Error detected while setting up 'vx1': vx1: vxlan type requires valid 'remote_ip' argument.  See ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/var/log/openvswitch"...</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-10-06T01:32:07.568910" elapsed="0.044006"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:07.613277" elapsed="0.000494"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.614902" level="INFO">ovs-vsctl: Error detected while setting up 'vx1': vx1: vxlan type requires valid 'remote_ip' argument.  See ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/var/log/openvswitch".</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.614274" elapsed="0.000724"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:32:07.615402" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:07.615165" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.615115" elapsed="0.000439"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:32:07.615897" elapsed="0.000056"/>
</return>
<status status="PASS" start="2026-10-06T01:32:07.615659" elapsed="0.000362"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.615630" elapsed="0.000444"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:32:07.616142" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:07.617799" elapsed="0.000633"/>
</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-10-06T01:32:07.618896" elapsed="0.000321"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:07.619528" elapsed="0.000248"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:07.616846" elapsed="0.003051"/>
</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-10-06T01:32:07.147856" elapsed="0.472194"/>
</kw>
<msg time="2026-10-06T01:32:07.620257" 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-10-06T01:32:07.147210" elapsed="0.473156"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:32:07.146786" elapsed="0.473740"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.621714" level="INFO">${dictionary_operational} = {'vx1': '2'}</msg>
<var>${dictionary_operational}</var>
<arg>vx1=2</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:32:07.621023" elapsed="0.000771"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.622940" level="INFO">${dictionary_config} = {'vx1': '0'}</msg>
<var>${dictionary_config}</var>
<arg>vx1=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:32:07.622212" elapsed="0.000784"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.633179" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:32:07.632392" elapsed="0.000844"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.634233" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:32:07.633574" elapsed="0.000713"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:32:07.634380" elapsed="0.000060"/>
</return>
<msg time="2026-10-06T01:32:07.634673" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:32:07.631550" elapsed="0.003235"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.638870" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:32:07.638375" elapsed="0.000532"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:32:07.638964" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:32:07.639133" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:32:07.637928" elapsed="0.001237"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.640824" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.640479" elapsed="0.000404"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.641737" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.641144" elapsed="0.000652"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:32:07.650138" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:32:07.650324" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '144'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:32:07.650449" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:32:07.642203" elapsed="0.008280"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.641883" elapsed="0.008655"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.650831" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.650573" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.641860" elapsed="0.009086"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.652798" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.652264" elapsed="0.000599"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.651934" elapsed="0.000973"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.651909" elapsed="0.001031"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.653748" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.653335" elapsed="0.000473"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.653010" elapsed="0.000842"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.652989" elapsed="0.000894"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.654619" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:07.654122" elapsed="0.000638"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.655157" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.654857" elapsed="0.000373"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.655902" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:07.655479" elapsed="0.000457"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.655262" elapsed="0.000720"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.654832" elapsed="0.001179"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.656797" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:07.656248" elapsed="0.000584"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.657206" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.656923" elapsed="0.000355"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.657939" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:07.657525" elapsed="0.000448"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.657309" elapsed="0.000710"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.656899" elapsed="0.001149"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:07.658240" elapsed="0.000411"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:32:07.659247" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:07.658913" elapsed="0.000367"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:32:07.659490" elapsed="0.000338"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:32:07.651405" elapsed="0.009179"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:32:07.660848" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-10-06T01:32:07.660698" elapsed="0.000229"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.660654" elapsed="0.000304"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.661155" elapsed="0.000027"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:32:07.661243" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:32:07.661544" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:32:07.639592" elapsed="0.021989"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:32:07.661651" elapsed="0.000058"/>
</return>
<msg time="2026-10-06T01:32:07.661867" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:32:07.637309" elapsed="0.024592"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.663361" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:32:07.662920" elapsed="0.000528"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:32:07.662651" elapsed="0.000846"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:32:07.662499" elapsed="0.001040"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:32:07.662187" elapsed="0.001419"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:32:07.635166" elapsed="0.028482"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.667422" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:07.667046" elapsed="0.000411"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:32:07.667516" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:32:07.667708" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:32:07.666563" elapsed="0.001192"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.669415" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.669106" elapsed="0.000366"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.670072" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.669767" elapsed="0.000361"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:32:07.682533" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0onugjjevyaz5kav2bikiz01a3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:32:07.682746" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:32:07.682882" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:32:07.670525" elapsed="0.012393"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.670213" elapsed="0.012766"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.683254" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.683015" elapsed="0.000323"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.670190" elapsed="0.013178"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.685236" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.684753" elapsed="0.000542"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.684376" elapsed="0.000964"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.684350" elapsed="0.001022"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.686183" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.685804" elapsed="0.000437"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.685442" elapsed="0.000843"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.685421" elapsed="0.000895"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.687104" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:07.686561" elapsed="0.000579"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.687512" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.687229" elapsed="0.000357"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.688250" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:07.687876" elapsed="0.000408"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.687617" elapsed="0.000713"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.687206" elapsed="0.001152"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.689111" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:07.688592" elapsed="0.000554"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.689516" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.689235" elapsed="0.000354"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.690254" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:07.689885" elapsed="0.000402"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.689623" elapsed="0.000709"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.689211" elapsed="0.001149"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:07.690554" elapsed="0.000451"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:32:07.691547" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:07.691227" elapsed="0.000362"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:32:07.691888" elapsed="0.000302"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:32:07.683874" elapsed="0.008395"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:32:07.692561" elapsed="0.000041"/>
</return>
<status status="PASS" start="2026-10-06T01:32:07.692431" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.692405" elapsed="0.000292"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.692922" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:32:07.693011" elapsed="0.000019"/>
</return>
<msg time="2026-10-06T01:32:07.693310" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:32:07.668221" elapsed="0.025124"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:32:07.693410" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:32:07.693580" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:32:07.665992" elapsed="0.027621"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.695316" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:32:07.694878" elapsed="0.000524"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:32:07.694617" elapsed="0.000837"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:32:07.694259" elapsed="0.001235"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:32:07.693935" elapsed="0.001628"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:32:07.663799" elapsed="0.031808"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.699224" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:07.698850" elapsed="0.000409"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:32:07.699316" elapsed="0.000037"/>
</return>
<msg time="2026-10-06T01:32:07.699485" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:32:07.698371" elapsed="0.001146"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.701371" level="INFO">/rests/data/network-topology:network-topology?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.701057" elapsed="0.000372"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.702032" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.701709" elapsed="0.000379"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:32:07.712633" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 path_url=/rests/data/network-topology:network-topology?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01ql1g6bmmojox1juom7bkbzdam3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:32:07.712765" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:32:07.712861" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:32:07.702486" elapsed="0.010399"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.702173" elapsed="0.010750"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.713099" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.712947" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.702149" elapsed="0.011028"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.714430" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.714104" elapsed="0.000368"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.713862" elapsed="0.000642"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.713843" elapsed="0.000685"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.715123" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.714854" elapsed="0.000309"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.714578" elapsed="0.000616"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.714563" elapsed="0.000653"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.715757" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:07.715385" elapsed="0.000398"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.716090" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.715881" elapsed="0.000261"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.716588" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:07.716324" elapsed="0.000288"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.716166" elapsed="0.000479"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.715863" elapsed="0.000802"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.717203" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:07.716861" elapsed="0.000367"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.717494" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.717292" elapsed="0.000255"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.718016" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:07.717753" elapsed="0.000287"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.717570" elapsed="0.000503"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.717276" elapsed="0.000817"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:07.718234" elapsed="0.000291"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:32:07.718953" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:07.718702" elapsed="0.000275"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:32:07.719128" elapsed="0.000209"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:32:07.713491" elapsed="0.005903"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:32:07.719536" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:32:07.719456" elapsed="0.000136"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.719439" elapsed="0.000175"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.719781" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:32:07.719846" elapsed="0.000015"/>
</return>
<msg time="2026-10-06T01:32:07.720062" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:32:07.699968" elapsed="0.020119"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:32:07.720132" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:32:07.720254" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:32:07.697799" elapsed="0.022478"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.721446" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:32:07.721141" elapsed="0.000365"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:32:07.720981" elapsed="0.000562"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:32:07.720876" elapsed="0.000694"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:32:07.720477" elapsed="0.001140"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:32:07.695760" elapsed="0.025889"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:32:07.634904" elapsed="0.086770"/>
</for>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:32:07.630389" elapsed="0.091368"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:32:07.623468" elapsed="0.098342"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.726217" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:32:07.725891" elapsed="0.000385"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.726717" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:32:07.726429" elapsed="0.000325"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:32:07.726796" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:32:07.726923" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:32:07.725505" elapsed="0.001441"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.729743" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:32:07.729442" elapsed="0.000327"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:32:07.729811" elapsed="0.000027"/>
</return>
<msg time="2026-10-06T01:32:07.729934" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:32:07.729120" elapsed="0.000837"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.731119" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.730888" elapsed="0.000272"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.731567" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.731348" elapsed="0.000259"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:32:07.739316" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:32:07.739477" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '6049'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;52328644-d3e6-48b0-bfd7-71e8d0b07579&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;74c4805a-3d8d-489f-91c1-aec7d1c82842&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;a97d6f5d-1992-4b3c-aaa5-49f051292349&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;46:86:32:52:b0:48&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;18&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vx1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8c699133-5abb-4800-8cd7-bef94f435dd4&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vx1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;dacecfa1-6384-4409-bdbe-486ac9da9ce3&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:46:86:32:52:b0:48&lt;/datapath-id&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:32:07.739698" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:32:07.731925" elapsed="0.007812"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.731668" elapsed="0.008110"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.739954" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.739803" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.731652" elapsed="0.008382"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.741346" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;managed-node-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;bridge-ref xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1']&lt;/bridge-ref&gt;&lt;/managed-node-entry&gt;&lt;/node&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1&lt;/node-id&gt;&lt;stp_enable xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;false&lt;/stp_enable&gt;&lt;bridge-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;52328644-d3e6-48b0-bfd7-71e8d0b07579&lt;/bridge-uuid&gt;&lt;managed-by xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb" xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='ovsdb:1']/a:node[a:node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b']&lt;/managed-by&gt;&lt;bridge-name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/bridge-name&gt;&lt;datapath-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;datapath-type-system&lt;/datapath-type&gt;&lt;termination-point&gt;&lt;tp-id&gt;br-s1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;74c4805a-3d8d-489f-91c1-aec7d1c82842&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;br-s1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;a97d6f5d-1992-4b3c-aaa5-49f051292349&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-internal&lt;/interface-type&gt;&lt;mac-in-use xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;46:86:32:52:b0:48&lt;/mac-in-use&gt;&lt;ofport xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;65534&lt;/ofport&gt;&lt;ifindex xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;18&lt;/ifindex&gt;&lt;/termination-point&gt;&lt;termination-point&gt;&lt;tp-id&gt;vx1&lt;/tp-id&gt;&lt;port-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8c699133-5abb-4800-8cd7-bef94f435dd4&lt;/port-uuid&gt;&lt;ingress-policing-burst xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-burst&gt;&lt;name xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;vx1&lt;/name&gt;&lt;interface-uuid xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;dacecfa1-6384-4409-bdbe-486ac9da9ce3&lt;/interface-uuid&gt;&lt;ingress-policing-rate xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;0&lt;/ingress-policing-rate&gt;&lt;interface-type xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/termination-point&gt;&lt;datapath-id xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;00:00:46:86:32:52:b0:48&lt;/datapath-id&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.740966" elapsed="0.000525"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.740711" elapsed="0.000814"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.740692" elapsed="0.000856"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.742135" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.741864" elapsed="0.000313"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.741600" elapsed="0.000609"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.741584" elapsed="0.000648"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.742921" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:07.742404" elapsed="0.000543"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.743217" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.743013" elapsed="0.000257"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.743751" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:07.743449" elapsed="0.000328"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.743293" elapsed="0.000518"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.742996" elapsed="0.000835"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.744341" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:07.744000" elapsed="0.000366"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.744631" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.744430" elapsed="0.000269"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.745161" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:07.744897" elapsed="0.000288"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.744738" elapsed="0.000480"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.744413" elapsed="0.000825"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:07.745378" elapsed="0.000293"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:32:07.746078" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:07.745857" elapsed="0.000245"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:32:07.746250" elapsed="0.000210"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:32:07.740352" elapsed="0.006163"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:32:07.746660" elapsed="0.000043"/>
</return>
<status status="PASS" start="2026-10-06T01:32:07.746577" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.746560" elapsed="0.000212"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.746911" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:32:07.746974" elapsed="0.000014"/>
</return>
<msg time="2026-10-06T01:32:07.747244" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:32:07.730250" elapsed="0.017022"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:32:07.747317" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:32:07.747438" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:32:07.728535" elapsed="0.018929"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.748495" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:32:07.748188" elapsed="0.000393"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:32:07.748029" elapsed="0.000588"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:32:07.747925" elapsed="0.000719"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:32:07.747670" elapsed="0.001036"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:32:07.727097" elapsed="0.021684"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.751318" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:07.751050" elapsed="0.000293"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:32:07.751384" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:32:07.751506" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:32:07.750716" elapsed="0.000813"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.752702" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.752462" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.753175" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.752954" elapsed="0.000261"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:32:07.765082" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0onugjjevyaz5kav2bikiz01a3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:32:07.765234" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2679'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":41758,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"52328644-d3e6-48b0-bfd7-71e8d0b07579","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"74c4805a-3d8d-489f-91c1-aec7d1c82842","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"a97d6f5d-1992-4b3c-aaa5-49f051292349","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"46:86:32:52:b0:48","ovsdb:ofport":65534,"ovsdb:ifindex":18},{"tp-id":"vx1","ovsdb:port-uuid":"8c699133-5abb-4800-8cd7-bef94f435dd4","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"dacecfa1-6384-4409-bdbe-486ac9da9ce3","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:46:86:32:52:b0:48"}]}]}} 
 </msg>
<msg time="2026-10-06T01:32:07.765338" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:32:07.753503" elapsed="0.011860"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.753277" elapsed="0.012125"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.765579" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.765426" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.753260" elapsed="0.012398"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.767163" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":41758,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"52328644-d3e6-48b0-bfd7-71e8d0b07579","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"74c4805a-3d8d-489f-91c1-aec7d1c82842","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"a97d6f5d-1992-4b3c-aaa5-49f051292349","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"46:86:32:52:b0:48","ovsdb:ofport":65534,"ovsdb:ifindex":18},{"tp-id":"vx1","ovsdb:port-uuid":"8c699133-5abb-4800-8cd7-bef94f435dd4","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"dacecfa1-6384-4409-bdbe-486ac9da9ce3","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:46:86:32:52:b0:48"}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.766603" elapsed="0.000655"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.766359" elapsed="0.000932"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.766342" elapsed="0.000973"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.767919" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.767603" elapsed="0.000357"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.767366" elapsed="0.000626"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.767351" elapsed="0.000664"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.768537" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:07.768186" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.768864" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.768626" elapsed="0.000291"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.769359" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:07.769095" elapsed="0.000288"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.768940" elapsed="0.000475"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.768609" elapsed="0.000826"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.769970" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:07.769601" elapsed="0.000394"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.770259" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.770058" elapsed="0.000253"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.770789" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:07.770488" elapsed="0.000325"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.770333" elapsed="0.000513"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.770042" elapsed="0.000825"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:07.771008" elapsed="0.000295"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:32:07.771700" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:07.771460" elapsed="0.000280"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:32:07.771891" elapsed="0.000210"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:32:07.766013" elapsed="0.006143"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:32:07.772298" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:32:07.772217" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.772201" elapsed="0.000177"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.772516" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:32:07.772579" elapsed="0.000015"/>
</return>
<msg time="2026-10-06T01:32:07.772910" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:32:07.751854" elapsed="0.021082"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:32:07.772982" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:32:07.773103" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:32:07.750287" elapsed="0.022840"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.774161" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:32:07.773854" elapsed="0.000379"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:32:07.773665" elapsed="0.000604"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:32:07.773555" elapsed="0.000742"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:32:07.773329" elapsed="0.001014"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:32:07.748865" elapsed="0.025540"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.776995" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:07.776669" elapsed="0.000351"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:32:07.777061" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:32:07.777182" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:32:07.776343" elapsed="0.000861"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.778355" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.778134" elapsed="0.000263"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.778859" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.778583" elapsed="0.000316"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:32:07.789987" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01ql1g6bmmojox1juom7bkbzdam3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:32:07.790135" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '2679'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":41758,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"52328644-d3e6-48b0-bfd7-71e8d0b07579","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"74c4805a-3d8d-489f-91c1-aec7d1c82842","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"a97d6f5d-1992-4b3c-aaa5-49f051292349","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"46:86:32:52:b0:48","ovsdb:ofport":65534,"ovsdb:ifindex":18},{"tp-id":"vx1","ovsdb:port-uuid":"8c699133-5abb-4800-8cd7-bef94f435dd4","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"dacecfa1-6384-4409-bdbe-486ac9da9ce3","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:46:86:32:52:b0:48"}]}]}} 
 </msg>
<msg time="2026-10-06T01:32:07.790238" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:32:07.779184" elapsed="0.011078"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.778961" elapsed="0.011340"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.790475" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.790324" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.778944" elapsed="0.011608"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.793446" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":41758,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}],"ovsdb:managed-node-entry":[{"bridge-ref":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1']"}]},{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b/bridge/br-s1","ovsdb:stp_enable":false,"ovsdb:bridge-uuid":"52328644-d3e6-48b0-bfd7-71e8d0b07579","ovsdb:bridge-name":"br-s1","ovsdb:managed-by":"/network-topology:network-topology/topology[topology-id='ovsdb:1']/node[node-id='ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b']","ovsdb:datapath-type":"ovsdb:datapath-type-system","termination-point":[{"tp-id":"br-s1","ovsdb:port-uuid":"74c4805a-3d8d-489f-91c1-aec7d1c82842","ovsdb:ingress-policing-burst":0,"ovsdb:name":"br-s1","ovsdb:interface-uuid":"a97d6f5d-1992-4b3c-aaa5-49f051292349","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-internal","ovsdb:mac-in-use":"46:86:32:52:b0:48","ovsdb:ofport":65534,"ovsdb:ifindex":18},{"tp-id":"vx1","ovsdb:port-uuid":"8c699133-5abb-4800-8cd7-bef94f435dd4","ovsdb:ingress-policing-burst":0,"ovsdb:name":"vx1","ovsdb:interface-uuid":"dacecfa1-6384-4409-bdbe-486ac9da9ce3","ovsdb:ingress-policing-rate":0,"ovsdb:interface-type":"ovsdb:interface-type-vxlan"}],"ovsdb:datapath-id":"00:00:46:86:32:52:b0:48"}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.793071" elapsed="0.000467"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.792819" elapsed="0.000752"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.791226" elapsed="0.002368"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.794185" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.793912" elapsed="0.000315"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.793645" elapsed="0.000614"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.793630" elapsed="0.000651"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.794844" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:07.794452" elapsed="0.000418"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.795139" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.794935" elapsed="0.000258"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.795637" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:07.795374" elapsed="0.000288"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.795215" elapsed="0.000497"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.794919" elapsed="0.000826"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.796262" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:07.795916" elapsed="0.000371"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.796552" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.796351" elapsed="0.000254"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.797079" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:07.796814" elapsed="0.000290"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:07.796627" elapsed="0.000518"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.796334" elapsed="0.000837"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:07.797333" elapsed="0.000300"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:32:07.798056" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:07.797829" elapsed="0.000251"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:32:07.798228" elapsed="0.000210"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:32:07.790905" elapsed="0.007588"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:32:07.798643" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-10-06T01:32:07.798555" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.798538" elapsed="0.000216"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.798894" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:32:07.798957" elapsed="0.000013"/>
</return>
<msg time="2026-10-06T01:32:07.799221" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:32:07.777496" elapsed="0.021751"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:32:07.799292" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:32:07.799413" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:32:07.775934" elapsed="0.023503"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.800470" level="INFO">Item found from container 2 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:32:07.800165" elapsed="0.000377"/>
</kw>
<var name="${item}">vx1</var>
<status status="PASS" start="2026-10-06T01:32:07.800008" elapsed="0.000570"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:32:07.799901" elapsed="0.000704"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:32:07.799641" elapsed="0.001013"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:32:07.774487" elapsed="0.026260"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:32:07.726992" elapsed="0.073783"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="PASS" start="2026-10-06T01:32:07.725023" elapsed="0.075800"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:32:07.722016" elapsed="0.078855"/>
</kw>
<doc>Add Port vx1 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:32:07.146385" elapsed="0.654543"/>
</kw>
<doc>Add port with OVS command and verify it gets applied from all instances.</doc>
<status status="PASS" start="2026-10-06T01:32:06.808305" elapsed="0.992729"/>
</test>
<test id="s1-s2-s2-t28" name="Delete the Bridge Manually and Verify After Recover" line="141">
<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-10-06T01:32:07.802526" elapsed="0.000232"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:32:07.802280" elapsed="0.000530"/>
</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-10-06T01:32:07.803714" elapsed="0.000047"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:07.803605" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.803588" elapsed="0.000224"/>
</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-10-06T01:32:07.805872" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:07.805786" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.805768" elapsed="0.000167"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.806869" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:32:07.806501" elapsed="0.000395"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.807319" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:32:07.807047" elapsed="0.000296"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:32:07.807383" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:32:07.807509" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:32:07.806141" elapsed="0.001392"/>
</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-10-06T01:32:07.809948" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:07.809865" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.809847" elapsed="0.000164"/>
</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-10-06T01:32:07.811172" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:07.811087" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.811070" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:07.811603" level="INFO">${karaf_connection_index} = 600</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-10-06T01:32:07.811377" elapsed="0.000251"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:07.812038" 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-10-06T01:32:07.811819" elapsed="0.000254"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:07.846374" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:07.812669" elapsed="0.033881"/>
</kw>
<msg time="2026-10-06T01:32:07.846752" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:07.846803" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:07.812230" elapsed="0.034608"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:07.927459" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:07.847431" elapsed="0.080214"/>
</kw>
<msg time="2026-10-06T01:32:07.927884" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:07.927925" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:07.847002" elapsed="0.080958"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.928236" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.928030" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.928012" elapsed="0.000318"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:07.928880" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:07.928507" elapsed="0.000460"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.929225" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.929029" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.929012" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:07.929348" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:07.931936" elapsed="0.000493"/>
</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-10-06T01:32:07.933668" elapsed="0.000649"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:07.935663" elapsed="0.000362"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:07.930176" elapsed="0.005916"/>
</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-10-06T01:32:07.929627" elapsed="0.006581"/>
</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="PASS" start="2026-10-06T01:32:07.810827" elapsed="0.125458"/>
</kw>
<msg time="2026-10-06T01:32:07.936368" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:07.936406" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:07.810158" elapsed="0.126283"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:07.936596" elapsed="0.000023"/>
</return>
<status status="PASS" start="2026-10-06T01:32:07.936512" elapsed="0.000137"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.936494" elapsed="0.000260"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:32:07.937093" elapsed="0.000025"/>
</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-10-06T01:32:07.937396" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:07.937461" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:32:07.809549" elapsed="0.127996"/>
</kw>
<msg time="2026-10-06T01:32:07.937629" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:07.937668" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:07.807883" elapsed="0.129838"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:07.938023" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:07.937803" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.937787" elapsed="0.000307"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:32:07.807744" elapsed="0.130371"/>
</iter>
<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-10-06T01:32:07.940587" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:07.940503" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.940485" elapsed="0.000165"/>
</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-10-06T01:32:07.941822" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:07.941734" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:07.941704" elapsed="0.000180"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:07.942251" level="INFO">${karaf_connection_index} = 602</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-10-06T01:32:07.942026" elapsed="0.000250"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:07.942621" 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-10-06T01:32:07.942436" elapsed="0.000214"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:07.975805" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:07.943243" elapsed="0.032775"/>
</kw>
<msg time="2026-10-06T01:32:07.976187" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:07.976231" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:07.942834" elapsed="0.033433"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:08.054976" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:07.976945" elapsed="0.078263"/>
</kw>
<msg time="2026-10-06T01:32:08.055386" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:08.055428" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:07.976446" elapsed="0.079017"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:08.055853" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:08.055557" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.055528" elapsed="0.000427"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.056521" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:08.056142" elapsed="0.000470"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:08.056928" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:08.056694" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.056657" elapsed="0.000368"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:08.057061" elapsed="0.000038"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:08.059800" elapsed="0.000483"/>
</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-10-06T01:32:08.061581" elapsed="0.000535"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:08.063534" elapsed="0.000569"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:08.057960" elapsed="0.006213"/>
</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-10-06T01:32:08.057388" elapsed="0.006904"/>
</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="PASS" start="2026-10-06T01:32:07.941439" elapsed="0.122932"/>
</kw>
<msg time="2026-10-06T01:32:08.064455" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:08.064495" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:07.940827" elapsed="0.123704"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:08.064783" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:32:08.064602" elapsed="0.000239"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.064584" elapsed="0.000281"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:08.065475" elapsed="0.000025"/>
</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-10-06T01:32:08.065819" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:08.065885" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:32:07.940210" elapsed="0.125762"/>
</kw>
<msg time="2026-10-06T01:32:08.066057" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:08.066097" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:07.938364" elapsed="0.127767"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:08.066421" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:08.066201" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.066185" elapsed="0.000307"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:32:07.938226" elapsed="0.128288"/>
</iter>
<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-10-06T01:32:08.069052" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:08.068966" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.068949" elapsed="0.000165"/>
</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-10-06T01:32:08.070216" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:08.070132" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.070115" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:08.070649" level="INFO">${karaf_connection_index} = 604</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-10-06T01:32:08.070421" elapsed="0.000253"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:08.071055" 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-10-06T01:32:08.070869" elapsed="0.000210"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:08.103241" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:08.071642" elapsed="0.031775"/>
</kw>
<msg time="2026-10-06T01:32:08.103590" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:08.103632" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:08.071232" elapsed="0.032435"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:08.198761" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:08.104283" elapsed="0.094678"/>
</kw>
<msg time="2026-10-06T01:32:08.199129" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:08.199170" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:08.103865" elapsed="0.095341"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:08.199502" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:08.199283" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.199263" elapsed="0.000335"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.200189" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "t "h "e "[C "B "r "i "d "g "e "[C "M "[78Ca "[A[78Cn
 "u "a "l "l "y "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:08.199830" elapsed="0.000449"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:08.200537" elapsed="0.000070"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:08.200340" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.200324" elapsed="0.000381"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:08.200753" elapsed="0.000030"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:08.203247" elapsed="0.000514"/>
</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-10-06T01:32:08.204973" elapsed="0.000453"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:08.206598" elapsed="0.000526"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:08.201555" elapsed="0.005637"/>
</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-10-06T01:32:08.201046" elapsed="0.006262"/>
</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="PASS" start="2026-10-06T01:32:08.069875" elapsed="0.137511"/>
</kw>
<msg time="2026-10-06T01:32:08.207468" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:08.207508" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:08.069259" elapsed="0.138284"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:08.207924" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:32:08.207613" elapsed="0.000369"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.207596" elapsed="0.000409"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:08.208326" elapsed="0.000024"/>
</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-10-06T01:32:08.208629" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:08.208710" elapsed="0.000026"/>
</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="PASS" start="2026-10-06T01:32:08.068642" elapsed="0.140170"/>
</kw>
<msg time="2026-10-06T01:32:08.208896" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:08.208935" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:08.066865" elapsed="0.142105"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:08.209258" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:08.209039" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.209023" elapsed="0.000306"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:32:08.066630" elapsed="0.142720"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:32:07.807578" elapsed="0.401803"/>
</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-10-06T01:32:07.805452" elapsed="0.403987"/>
</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-10-06T01:32:07.803351" elapsed="0.406142"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:07.802957" elapsed="0.406582"/>
</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-10-06T01:32:07.801938" elapsed="0.407651"/>
</kw>
<kw name="Delete Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:08.213241" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:08.213005" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.212988" elapsed="0.000328"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:08.213638" 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-10-06T01:32:08.213763" 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-10-06T01:32:08.213508" elapsed="0.000314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.214300" level="INFO">Attempting to execute command "sudo ovs-vsctl del-br br-s1" on remote system "10.30.170.234" 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-10-06T01:32:08.214013" elapsed="0.000329"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:08.214856" level="INFO">${conn_id} = 713</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-10-06T01:32:08.214516" elapsed="0.000365"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.215716" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:32:08.215800" 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-10-06T01:32:08.215436" elapsed="0.000387"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:08.215971" elapsed="0.000281"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:32:08.217074" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:32:08.593800" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:32:06 UTC 2026

  System load:  0.01               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:32:07 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:32:08.216841" elapsed="0.377072"/>
</kw>
<msg time="2026-10-06T01:32:08.593985" 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-10-06T01:32:08.216413" elapsed="0.377648"/>
</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-10-06T01:32:08.215077" elapsed="0.379085"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:32:08.594629" level="INFO">Executing command 'sudo ovs-vsctl del-br br-s1'.</msg>
<msg time="2026-10-06T01:32:08.678416" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:32:08.678937" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:32:08.679090" level="INFO">${stderr} = </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-10-06T01:32:08.594407" elapsed="0.084761"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:08.679872" elapsed="0.000625"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.682011" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:08.681205" elapsed="0.000906"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:32:08.682724" elapsed="0.000085"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:08.682315" elapsed="0.000575"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.682244" elapsed="0.000700"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:32:08.683258" elapsed="0.000065"/>
</return>
<status status="PASS" start="2026-10-06T01:32:08.683059" elapsed="0.000332"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.683026" elapsed="0.000417"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:32:08.683512" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:08.685215" elapsed="0.000689"/>
</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-10-06T01:32:08.686342" elapsed="0.000422"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:08.687084" elapsed="0.000199"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:08.684241" elapsed="0.003148"/>
</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-10-06T01:32:08.212531" elapsed="0.475012"/>
</kw>
<msg time="2026-10-06T01:32:08.687649" 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-10-06T01:32:08.211972" elapsed="0.475836"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl del-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:32:08.211526" elapsed="0.476558"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.689237" level="INFO">${dictionary} = {'br-s1': '0'}</msg>
<var>${dictionary}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:32:08.688514" elapsed="0.000778"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.696712" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:32:08.695948" elapsed="0.000843"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.697791" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:32:08.697126" elapsed="0.000723"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:32:08.697940" elapsed="0.000061"/>
</return>
<msg time="2026-10-06T01:32:08.698223" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:32:08.695111" elapsed="0.003163"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.704340" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:32:08.703715" elapsed="0.000682"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:32:08.704490" elapsed="0.000057"/>
</return>
<msg time="2026-10-06T01:32:08.704821" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:32:08.702969" elapsed="0.001904"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.707475" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:08.706982" elapsed="0.000589"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.708710" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:08.708192" elapsed="0.000634"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:32:08.717278" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:32:08.717549" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '3371'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:32:08.717909" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:32:08.709810" elapsed="0.008156"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:08.709336" elapsed="0.008716"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:08.718442" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:08.718106" elapsed="0.000466"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.708927" elapsed="0.009691"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.721661" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;8.3.0&lt;/db-version&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-vxlan&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-tap&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-stt&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-internal&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-patch&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-lisp&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-geneve&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-gre&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;interface-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;interface-type&gt;interface-type-system&lt;/interface-type&gt;&lt;/interface-type-entry&gt;&lt;ovs-version xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;2.17.11&lt;/ovs-version&gt;&lt;connection-info xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;local-port&gt;6640&lt;/local-port&gt;&lt;remote-port&gt;41758&lt;/remote-port&gt;&lt;local-ip&gt;10.30.171.109&lt;/local-ip&gt;&lt;remote-ip&gt;10.30.170.234&lt;/remote-ip&gt;&lt;/connection-info&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;system-id&lt;/external-id-key&gt;&lt;external-id-value/&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;hostname&lt;/external-id-key&gt;&lt;external-id-value&gt;localhost&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;openvswitch-external-ids xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;external-id-key&gt;rundir&lt;/external-id-key&gt;&lt;external-id-value&gt;/var/run/openvswitch&lt;/external-id-value&gt;&lt;/openvswitch-external-ids&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-netdev&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;datapath-type-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;datapath-type&gt;datapath-type-system&lt;/datapath-type&gt;&lt;/datapath-type-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.109:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.171.171:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;manager-entry xmlns="urn:opendaylight:params:xml:ns:yang:ovsdb"&gt;&lt;target&gt;tcp:10.30.170.97:6640&lt;/target&gt;&lt;number_of_connections&gt;1&lt;/number_of_connections&gt;&lt;connected&gt;true&lt;/connected&gt;&lt;/manager-entry&gt;&lt;/node&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:08.720791" elapsed="0.001119"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:08.720218" elapsed="0.001765"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.720178" elapsed="0.001857"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.723381" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:08.722760" elapsed="0.000715"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:08.722148" elapsed="0.001397"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.722114" elapsed="0.001482"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.724856" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:08.724023" elapsed="0.000892"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:08.725513" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:08.725060" elapsed="0.000570"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.726711" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:08.726087" elapsed="0.000702"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:08.725713" elapsed="0.001152"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.725023" elapsed="0.001887"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.728093" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:08.727282" elapsed="0.000869"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:08.728803" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:08.728294" elapsed="0.000903"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.730295" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:08.729635" elapsed="0.000716"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:08.729268" elapsed="0.001155"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.728257" elapsed="0.002212"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:08.730831" elapsed="0.000661"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:32:08.732500" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:08.731961" elapsed="0.000595"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:32:08.732948" elapsed="0.000480"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:32:08.719398" elapsed="0.014156"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:32:08.733944" elapsed="0.000055"/>
</return>
<status status="PASS" start="2026-10-06T01:32:08.733755" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.733660" elapsed="0.000457"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:08.734427" elapsed="0.000045"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:32:08.734599" elapsed="0.000042"/>
</return>
<msg time="2026-10-06T01:32:08.735310" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:32:08.705542" elapsed="0.029844"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:32:08.735492" elapsed="0.000072"/>
</return>
<msg time="2026-10-06T01:32:08.735867" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;node&gt;&lt;node-id&gt;ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b&lt;/node-id&gt;&lt;db-version ...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:32:08.701956" elapsed="0.033972"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.738105" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:32:08.737613" elapsed="0.000589"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:32:08.737263" elapsed="0.000990"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:32:08.737031" elapsed="0.001260"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:32:08.736381" elapsed="0.001977"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:32:08.698714" elapsed="0.039688"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.742171" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:08.741793" elapsed="0.000413"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:32:08.742264" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:32:08.742436" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:32:08.741319" elapsed="0.001148"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.744115" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:08.743806" elapsed="0.000367"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.744771" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:08.744431" elapsed="0.000397"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:32:08.757865" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0onugjjevyaz5kav2bikiz01a3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:32:08.758071" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '1397'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":41758,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:32:08.758295" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:32:08.745224" elapsed="0.013108"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:08.744912" elapsed="0.013485"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:08.758722" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:08.758435" elapsed="0.000390"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.744889" elapsed="0.013965"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.760805" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":41758,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:08.760228" elapsed="0.000669"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:08.759887" elapsed="0.001056"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.759859" elapsed="0.001116"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.761783" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:08.761373" elapsed="0.000468"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:08.761047" elapsed="0.000838"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.761025" elapsed="0.000893"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.762699" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:08.762166" elapsed="0.000588"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:08.763140" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:08.762850" elapsed="0.000364"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.763867" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:08.763464" elapsed="0.000437"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:08.763246" elapsed="0.000702"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.762826" elapsed="0.001150"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.764673" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:08.764209" elapsed="0.000521"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:08.765116" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:08.764834" elapsed="0.000354"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.765829" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:08.765431" elapsed="0.000434"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:08.765218" elapsed="0.000692"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.764811" elapsed="0.001127"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:08.766132" elapsed="0.000428"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:32:08.767146" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:08.766821" elapsed="0.000359"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:32:08.767387" elapsed="0.000313"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:32:08.759334" elapsed="0.008463"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:32:08.768002" elapsed="0.000043"/>
</return>
<status status="PASS" start="2026-10-06T01:32:08.767885" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.767861" elapsed="0.000259"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:08.768315" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:32:08.768450" elapsed="0.000021"/>
</return>
<msg time="2026-10-06T01:32:08.768824" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:32:08.742934" elapsed="0.025928"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:32:08.768926" elapsed="0.000036"/>
</return>
<msg time="2026-10-06T01:32:08.769101" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:32:08.740732" elapsed="0.028404"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.770937" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:32:08.770405" elapsed="0.000632"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:32:08.770180" elapsed="0.000926"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:32:08.769788" elapsed="0.001370"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:32:08.769429" elapsed="0.001823"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:32:08.738518" elapsed="0.032796"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.775369" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:08.774507" elapsed="0.000898"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:32:08.775463" elapsed="0.000038"/>
</return>
<msg time="2026-10-06T01:32:08.775635" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:32:08.774065" elapsed="0.001602"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.777405" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:08.777099" elapsed="0.000365"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.778067" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:08.777762" elapsed="0.000361"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:32:08.793980" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01ql1g6bmmojox1juom7bkbzdam3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:32:08.794155" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '1397'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":41758,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}} 
 </msg>
<msg time="2026-10-06T01:32:08.794300" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:32:08.778518" elapsed="0.015817"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:08.778208" elapsed="0.016181"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:08.794653" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:08.794424" elapsed="0.000350"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.778184" elapsed="0.016619"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.796568" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry":[{"interface-type":"ovsdb:interface-type-vxlan"},{"interface-type":"ovsdb:interface-type-tap"},{"interface-type":"ovsdb:interface-type-stt"},{"interface-type":"ovsdb:interface-type-internal"},{"interface-type":"ovsdb:interface-type-patch"},{"interface-type":"ovsdb:interface-type-lisp"},{"interface-type":"ovsdb:interface-type-geneve"},{"interface-type":"ovsdb:interface-type-gre"},{"interface-type":"ovsdb:interface-type-system"}],"ovsdb:ovs-version":"2.17.11","ovsdb:connection-info":{"local-port":6640,"remote-port":41758,"local-ip":"10.30.171.109","remote-ip":"10.30.170.234"},"ovsdb:openvswitch-external-ids":[{"external-id-key":"system-id","external-id-value":""},{"external-id-key":"hostname","external-id-value":"localhost"},{"external-id-key":"rundir","external-id-value":"/var/run/openvswitch"}],"ovsdb:datapath-type-entry":[{"datapath-type":"ovsdb:datapath-type-netdev"},{"datapath-type":"ovsdb:datapath-type-system"}],"ovsdb:manager-entry":[{"target":"tcp:10.30.171.109:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.171.171:6640","number_of_connections":1,"connected":true},{"target":"tcp:10.30.170.97:6640","number_of_connections":1,"connected":true}]}]}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:08.796093" elapsed="0.000627"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:08.795758" elapsed="0.001024"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.795720" elapsed="0.001095"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.797598" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:08.797223" elapsed="0.000433"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:08.796889" elapsed="0.000833"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.796867" elapsed="0.000904"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.798504" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:08.798012" elapsed="0.000527"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:08.798953" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:08.798628" elapsed="0.000399"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.799642" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:08.799275" elapsed="0.000420"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:08.799059" elapsed="0.000697"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.798605" elapsed="0.001180"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.800515" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:08.800023" elapsed="0.000529"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:08.800966" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:08.800643" elapsed="0.000396"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.801673" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:08.801285" elapsed="0.000447"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:08.801070" elapsed="0.000726"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.800620" elapsed="0.001205"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:08.802026" elapsed="0.000414"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:32:08.803030" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:08.802697" elapsed="0.000367"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:32:08.803271" elapsed="0.000290"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:32:08.795251" elapsed="0.008386"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:32:08.803881" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-10-06T01:32:08.803765" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.803730" elapsed="0.000260"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:08.804183" elapsed="0.000027"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:32:08.804269" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:32:08.804589" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:32:08.776126" elapsed="0.028499"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:32:08.804709" elapsed="0.000049"/>
</return>
<msg time="2026-10-06T01:32:08.804897" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1","node":[{"node-id":"ovsdb://uuid/3b16c24e-fe2c-4b90-8d25-329c21bf5e7b","ovsdb:db-version":"8.3.0","ovsdb:interface-type-entry...</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:32:08.773459" elapsed="0.031472"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.806561" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:32:08.806134" elapsed="0.000517"/>
</kw>
<var name="${item}">br-s1</var>
<status status="PASS" start="2026-10-06T01:32:08.805912" elapsed="0.000810"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:32:08.805762" elapsed="0.001013"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:32:08.805212" elapsed="0.001631"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:32:08.771461" elapsed="0.035476"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:32:08.698392" elapsed="0.108584"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary {'br-s1': '0'}.</doc>
<status status="PASS" start="2026-10-06T01:32:08.693962" elapsed="0.113082"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:32:08.689770" elapsed="0.117345"/>
</kw>
<doc>Delete bridge br-s1 using OVS command and verify it gets applied in all instances in ${controller_index_list}.</doc>
<status status="PASS" start="2026-10-06T01:32:08.211155" elapsed="0.596042"/>
</kw>
<doc>Delete bridge with OVS command and verify it gets deleted from all instances.</doc>
<status status="PASS" start="2026-10-06T01:32:07.801350" elapsed="1.005989"/>
</test>
<test id="s1-s2-s2-t29" name="Verify Modified Port After Recover" line="145">
<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-10-06T01:32:08.809220" elapsed="0.000276"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:32:08.808871" elapsed="0.000695"/>
</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-10-06T01:32:08.810890" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:08.810767" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.810729" elapsed="0.000249"/>
</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-10-06T01:32:08.813615" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:08.813499" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.813476" elapsed="0.000247"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.815027" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:32:08.814522" elapsed="0.000540"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.815645" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:32:08.815270" elapsed="0.000428"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:32:08.815769" elapsed="0.000039"/>
</return>
<msg time="2026-10-06T01:32:08.815948" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:32:08.814021" elapsed="0.001959"/>
</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-10-06T01:32:08.819427" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:08.819342" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.819324" elapsed="0.000167"/>
</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-10-06T01:32:08.820623" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:08.820539" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.820523" elapsed="0.000196"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:08.821124" level="INFO">${karaf_connection_index} = 600</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-10-06T01:32:08.820894" elapsed="0.000254"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:08.821505" 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-10-06T01:32:08.821309" elapsed="0.000223"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:08.853114" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:08.822147" elapsed="0.031143"/>
</kw>
<msg time="2026-10-06T01:32:08.853451" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:08.853493" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:08.821706" elapsed="0.031821"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:08.913791" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "M "o "d "i "f "i "e "d "[C "P "o "r "[78Ct "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:08.854142" elapsed="0.059829"/>
</kw>
<msg time="2026-10-06T01:32:08.914170" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:08.914213" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:08.853710" elapsed="0.060539"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:08.914531" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:08.914321" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.914303" elapsed="0.000323"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:08.915181" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "M "o "d "i "f "i "e "d "[C "P "o "r "[78Ct "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:08.914839" elapsed="0.000422"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:08.915520" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:08.915323" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.915306" elapsed="0.000307"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:08.915643" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:08.918173" elapsed="0.000478"/>
</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-10-06T01:32:08.920012" elapsed="0.000482"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:08.921948" elapsed="0.000315"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:08.916449" elapsed="0.005880"/>
</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-10-06T01:32:08.915949" elapsed="0.006497"/>
</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="PASS" start="2026-10-06T01:32:08.820281" elapsed="0.102248"/>
</kw>
<msg time="2026-10-06T01:32:08.922635" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:08.922674" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:08.819638" elapsed="0.103094"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:08.922899" elapsed="0.000023"/>
</return>
<status status="PASS" start="2026-10-06T01:32:08.922814" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.922797" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:32:08.923301" elapsed="0.000024"/>
</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-10-06T01:32:08.923599" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:08.923662" elapsed="0.000120"/>
</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="PASS" start="2026-10-06T01:32:08.819047" elapsed="0.104813"/>
</kw>
<msg time="2026-10-06T01:32:08.923943" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:08.923983" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:08.816424" elapsed="0.107593"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:08.924302" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:08.924085" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.924069" elapsed="0.000303"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:32:08.816232" elapsed="0.108160"/>
</iter>
<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-10-06T01:32:08.926948" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:08.926864" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.926846" elapsed="0.000165"/>
</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-10-06T01:32:08.928149" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:08.928035" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:08.928018" elapsed="0.000198"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:08.928585" level="INFO">${karaf_connection_index} = 602</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-10-06T01:32:08.928359" elapsed="0.000252"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:08.928986" 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-10-06T01:32:08.928801" elapsed="0.000209"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:08.957889" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:08.929573" elapsed="0.028567"/>
</kw>
<msg time="2026-10-06T01:32:08.958380" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:08.958447" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:08.929162" elapsed="0.029341"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:09.004336" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "M "o "d "i "f "i "e "d "[C "P "o "r "[78Ct "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:08.959463" elapsed="0.045078"/>
</kw>
<msg time="2026-10-06T01:32:09.004752" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:09.004797" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:08.958806" elapsed="0.046027"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:09.005169" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:09.004923" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:09.004897" elapsed="0.000371"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:09.005854" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "M "o "d "i "f "i "e "d "[C "P "o "r "[78Ct "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:09.005449" elapsed="0.000489"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:09.006197" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:09.005999" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:09.005983" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:09.006325" elapsed="0.000035"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:09.008968" elapsed="0.000482"/>
</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-10-06T01:32:09.010716" elapsed="0.000529"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:09.012703" elapsed="0.000381"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:09.007209" elapsed="0.005946"/>
</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-10-06T01:32:09.006638" elapsed="0.006637"/>
</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="PASS" start="2026-10-06T01:32:08.927775" elapsed="0.085579"/>
</kw>
<msg time="2026-10-06T01:32:09.013438" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:09.013480" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:08.927157" elapsed="0.086359"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:09.013762" elapsed="0.000031"/>
</return>
<status status="PASS" start="2026-10-06T01:32:09.013586" elapsed="0.000240"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:09.013569" elapsed="0.000281"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:09.014191" elapsed="0.000024"/>
</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-10-06T01:32:09.014625" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:09.014713" elapsed="0.000018"/>
</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="PASS" start="2026-10-06T01:32:08.926530" elapsed="0.088294"/>
</kw>
<msg time="2026-10-06T01:32:09.014913" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:09.014953" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:08.924637" elapsed="0.090351"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:09.015282" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:09.015059" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:09.015043" elapsed="0.000310"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:32:08.924502" elapsed="0.090873"/>
</iter>
<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-10-06T01:32:09.019806" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:09.019704" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:09.019671" elapsed="0.000198"/>
</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-10-06T01:32:09.020977" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:09.020892" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:09.020875" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:09.021446" level="INFO">${karaf_connection_index} = 604</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-10-06T01:32:09.021193" elapsed="0.000279"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:09.021857" 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-10-06T01:32:09.021635" elapsed="0.000247"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:09.056090" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:09.022452" elapsed="0.033813"/>
</kw>
<msg time="2026-10-06T01:32:09.056423" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:09.056465" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:09.022035" elapsed="0.034464"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:09.118484" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "M "o "d "i "f "i "e "d "[C "P "o "r "[78Ct "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:09.057116" elapsed="0.061547"/>
</kw>
<msg time="2026-10-06T01:32:09.118855" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:09.118896" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:09.056663" elapsed="0.062268"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:09.119206" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:09.119002" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:09.118984" elapsed="0.000316"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:09.119848" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "M "o "d "i "f "i "e "d "[C "P "o "r "[78Ct "[A[78C
 "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:09.119475" elapsed="0.000452"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:09.120183" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:09.119988" elapsed="0.000263"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:09.119971" elapsed="0.000303"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:09.120304" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:09.122893" elapsed="0.000475"/>
</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-10-06T01:32:09.124593" elapsed="0.000499"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:09.126451" elapsed="0.000339"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:09.121157" elapsed="0.005702"/>
</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-10-06T01:32:09.120612" elapsed="0.006365"/>
</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="PASS" start="2026-10-06T01:32:09.020597" elapsed="0.106456"/>
</kw>
<msg time="2026-10-06T01:32:09.127135" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:09.127174" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:09.020017" elapsed="0.107192"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:09.127362" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:32:09.127278" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:09.127261" elapsed="0.000177"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:09.127815" elapsed="0.000024"/>
</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-10-06T01:32:09.128109" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:09.128173" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:32:09.019387" elapsed="0.108869"/>
</kw>
<msg time="2026-10-06T01:32:09.128338" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:09.128377" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:09.015636" elapsed="0.112775"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:09.128732" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:09.128478" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:09.128462" elapsed="0.000355"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:32:09.015496" elapsed="0.113342"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:32:08.816044" elapsed="0.312821"/>
</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-10-06T01:32:08.813090" elapsed="0.315827"/>
</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-10-06T01:32:08.810348" elapsed="0.318619"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:08.809805" elapsed="0.319203"/>
</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-10-06T01:32:08.808362" elapsed="0.320693"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:32:09.131445" level="INFO">${port_dictionary} = {'br01': '6', 'vx2': '3', '10.0.0.19': '1'}</msg>
<var>${port_dictionary}</var>
<arg>br01=6</arg>
<arg>vx2=3</arg>
<arg>10.0.0.19=1</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:32:09.131061" elapsed="0.000415"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:32:09.136049" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:32:09.134755" elapsed="0.001330">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:32:10.145914" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:32:10.142911" elapsed="0.003098">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:32:11.155942" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:32:11.152932" elapsed="0.003105">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:32:12.165992" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:32:12.162975" elapsed="0.003120">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:32:13.175719" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:32:13.172709" elapsed="0.003118">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:32:14.185973" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:32:14.182930" elapsed="0.003142">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<msg time="2026-10-06T01:32:14.186287" level="FAIL">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</msg>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-10-06T01:32:09.131715" elapsed="5.054852">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:32:09.130596" elapsed="5.056289">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify modified port exists in all instances.</doc>
<status status="FAIL" start="2026-10-06T01:32:08.807748" elapsed="5.379432">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s2-s2-t30" name="Delete Port In New Owner After Recover" line="149">
<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-10-06T01:32:14.190441" elapsed="0.000576"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:32:14.189876" elapsed="0.001255"/>
</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-10-06T01:32:14.193403" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:14.193177" elapsed="0.000326"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.193131" elapsed="0.000421"/>
</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-10-06T01:32:14.198076" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:14.197885" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.197845" elapsed="0.000372"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:32:14.200303" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:32:14.199512" elapsed="0.000849"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:32:14.201416" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:32:14.200726" elapsed="0.000745"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:32:14.201561" elapsed="0.000062"/>
</return>
<msg time="2026-10-06T01:32:14.201910" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:32:14.198668" elapsed="0.003294"/>
</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-10-06T01:32:14.207924" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:14.207707" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.207639" elapsed="0.000429"/>
</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-10-06T01:32:14.210629" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:14.210443" elapsed="0.000432"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.210406" elapsed="0.000527"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:14.211842" level="INFO">${karaf_connection_index} = 600</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-10-06T01:32:14.211261" elapsed="0.000639"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:14.212724" 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-10-06T01:32:14.212265" elapsed="0.000517"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:14.246760" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:14.214231" elapsed="0.032795"/>
</kw>
<msg time="2026-10-06T01:32:14.247250" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:14.247308" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.213219" elapsed="0.034138"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:14.330258" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "N "e "w "[C "[78CO "[A[78Cw
 "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:14.248265" elapsed="0.082181"/>
</kw>
<msg time="2026-10-06T01:32:14.330608" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:14.330651" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.247586" elapsed="0.083122"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:14.331011" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:14.330783" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.330763" elapsed="0.000343"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:14.331635" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "N "e "w "[C "[78CO "[A[78Cw
 "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:14.331288" elapsed="0.000448"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:14.332016" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:14.331800" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.331783" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:14.332146" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:14.334636" elapsed="0.000519"/>
</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-10-06T01:32:14.336382" elapsed="0.000526"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:14.338280" elapsed="0.000311"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:14.332981" elapsed="0.005675"/>
</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-10-06T01:32:14.332436" elapsed="0.006353"/>
</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="PASS" start="2026-10-06T01:32:14.209866" elapsed="0.129016"/>
</kw>
<msg time="2026-10-06T01:32:14.338964" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:14.339005" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.208397" elapsed="0.130643"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:14.339195" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:32:14.339109" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.339092" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:32:14.339601" elapsed="0.000024"/>
</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-10-06T01:32:14.340047" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:14.340114" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:32:14.207027" elapsed="0.133173"/>
</kw>
<msg time="2026-10-06T01:32:14.340285" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:14.340325" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.202728" elapsed="0.137631"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:14.340647" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:14.340428" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.340412" elapsed="0.000325"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:32:14.202383" elapsed="0.138375"/>
</iter>
<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-10-06T01:32:14.343356" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:14.343271" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.343253" elapsed="0.000165"/>
</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-10-06T01:32:14.344520" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:14.344435" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.344418" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:14.344990" level="INFO">${karaf_connection_index} = 602</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-10-06T01:32:14.344749" elapsed="0.000266"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:14.345358" 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-10-06T01:32:14.345176" elapsed="0.000206"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:14.383942" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:14.345988" elapsed="0.038147"/>
</kw>
<msg time="2026-10-06T01:32:14.384291" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:14.384333" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.345535" elapsed="0.038832"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:14.450998" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "N "e "w "[C "[78CO "[A[78Cw
 "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:14.384990" elapsed="0.066211"/>
</kw>
<msg time="2026-10-06T01:32:14.451374" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:14.451416" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.384534" elapsed="0.066917"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:14.451789" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:14.451533" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.451510" elapsed="0.000391"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:14.452444" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "N "e "w "[C "[78CO "[A[78Cw
 "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:14.452087" elapsed="0.000442"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:14.452862" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:14.452590" elapsed="0.000350"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.452573" elapsed="0.000390"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:14.452995" elapsed="0.000030"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:14.455571" elapsed="0.000551"/>
</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-10-06T01:32:14.457357" elapsed="0.000508"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:14.459246" elapsed="0.000311"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:14.453883" elapsed="0.005740"/>
</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-10-06T01:32:14.453333" elapsed="0.006426"/>
</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="PASS" start="2026-10-06T01:32:14.344176" elapsed="0.115675"/>
</kw>
<msg time="2026-10-06T01:32:14.459937" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:14.459976" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.343567" elapsed="0.116445"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:14.460167" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:32:14.460082" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.460064" elapsed="0.000181"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:14.460567" elapsed="0.000024"/>
</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-10-06T01:32:14.460972" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:14.461038" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:32:14.342975" elapsed="0.118148"/>
</kw>
<msg time="2026-10-06T01:32:14.461209" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:14.461250" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.341026" elapsed="0.120259"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:14.461573" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:14.461355" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.461339" elapsed="0.000306"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:32:14.340887" elapsed="0.120779"/>
</iter>
<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-10-06T01:32:14.464303" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:14.464217" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.464201" elapsed="0.000165"/>
</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-10-06T01:32:14.465457" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:14.465372" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.465355" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:14.465925" level="INFO">${karaf_connection_index} = 604</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-10-06T01:32:14.465660" elapsed="0.000289"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:14.466294" 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-10-06T01:32:14.466110" elapsed="0.000208"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:14.498050" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:14.466918" elapsed="0.031319"/>
</kw>
<msg time="2026-10-06T01:32:14.498392" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:14.498433" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.466470" elapsed="0.031998"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:14.570087" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "N "e "w "[C "[78CO "[A[78Cw
 "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:14.499097" elapsed="0.071210"/>
</kw>
<msg time="2026-10-06T01:32:14.570467" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:14.570509" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.498633" elapsed="0.071911"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:14.570867" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:14.570616" elapsed="0.000329"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.570598" elapsed="0.000370"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:14.571488" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "N "e "w "[C "[78CO "[A[78Cw
 "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:14.571149" elapsed="0.000420"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:14.571862" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:14.571631" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.571614" elapsed="0.000342"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:14.571987" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:14.574448" elapsed="0.000522"/>
</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-10-06T01:32:14.576201" elapsed="0.000457"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:14.578082" elapsed="0.000309"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:14.572767" elapsed="0.005691"/>
</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-10-06T01:32:14.572253" elapsed="0.006323"/>
</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="PASS" start="2026-10-06T01:32:14.465114" elapsed="0.113540"/>
</kw>
<msg time="2026-10-06T01:32:14.578756" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:14.578797" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.464511" elapsed="0.114335"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:14.579008" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:32:14.578920" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.578900" elapsed="0.000186"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:14.579403" elapsed="0.000023"/>
</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-10-06T01:32:14.579796" elapsed="0.000046"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:14.579886" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:32:14.463922" elapsed="0.116051"/>
</kw>
<msg time="2026-10-06T01:32:14.580057" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:14.580096" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.461952" elapsed="0.118179"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:14.580419" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:14.580199" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.580183" elapsed="0.000308"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:32:14.461799" elapsed="0.118713"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:32:14.202072" elapsed="0.378468"/>
</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-10-06T01:32:14.196963" elapsed="0.383629"/>
</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-10-06T01:32:14.192474" elapsed="0.388220"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.191460" elapsed="0.389282"/>
</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-10-06T01:32:14.189039" elapsed="0.391754"/>
</kw>
<kw name="Delete Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:32:14.584835" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<doc>Delete port vx2 from bridge br01 in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:32:14.583642" elapsed="0.001230">Variable '${new_owner}' not found.</status>
</kw>
<doc>Delete port in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:32:14.187655" elapsed="0.397353">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s2-s2-t31" name="Delete Bridge In New Owner And Verify After Recover" line="153">
<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-10-06T01:32:14.586326" elapsed="0.000200"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:32:14.586079" elapsed="0.000497"/>
</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-10-06T01:32:14.587483" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:14.587398" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.587381" elapsed="0.000166"/>
</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-10-06T01:32:14.589437" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:14.589353" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.589336" elapsed="0.000163"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:32:14.590417" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:32:14.590092" elapsed="0.000351"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:32:14.590916" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:32:14.590595" elapsed="0.000346"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:32:14.590982" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:32:14.591108" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:32:14.589718" elapsed="0.001412"/>
</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-10-06T01:32:14.593705" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:14.593604" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.593587" elapsed="0.000182"/>
</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-10-06T01:32:14.595015" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:14.594931" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.594914" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:14.595445" level="INFO">${karaf_connection_index} = 600</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-10-06T01:32:14.595221" elapsed="0.000249"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:14.595846" 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-10-06T01:32:14.595633" elapsed="0.000238"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:14.630766" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:14.596440" elapsed="0.034517"/>
</kw>
<msg time="2026-10-06T01:32:14.631117" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:14.631160" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.596026" elapsed="0.035169"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:14.711033" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "N "e "[78Cw "[A[78C
 "O "w "n "e "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:14.631804" elapsed="0.079419"/>
</kw>
<msg time="2026-10-06T01:32:14.711381" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:14.711459" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.631360" elapsed="0.080137"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:14.711802" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:14.711569" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.711550" elapsed="0.000364"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:14.712440" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "N "e "[78Cw "[A[78C
 "O "w "n "e "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:14.712101" elapsed="0.000426"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:14.712840" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:14.712589" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.712573" elapsed="0.000385"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:14.712990" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:14.715424" elapsed="0.000506"/>
</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-10-06T01:32:14.717142" elapsed="0.000449"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:14.718769" elapsed="0.000322"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:14.713781" elapsed="0.005376"/>
</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-10-06T01:32:14.713263" elapsed="0.006012"/>
</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="PASS" start="2026-10-06T01:32:14.594634" elapsed="0.124718"/>
</kw>
<msg time="2026-10-06T01:32:14.719434" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:14.719473" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.593928" elapsed="0.125580"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:14.719664" elapsed="0.000329"/>
</return>
<status status="PASS" start="2026-10-06T01:32:14.719578" elapsed="0.000448"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.719560" elapsed="0.000489"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:32:14.720364" elapsed="0.000025"/>
</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-10-06T01:32:14.720662" elapsed="0.000039"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:14.720744" 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="PASS" start="2026-10-06T01:32:14.593311" elapsed="0.127535"/>
</kw>
<msg time="2026-10-06T01:32:14.720931" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:14.720971" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.591461" elapsed="0.129547"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:14.721294" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:14.721076" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.721060" elapsed="0.000304"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:32:14.591322" elapsed="0.130063"/>
</iter>
<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-10-06T01:32:14.723953" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:14.723866" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.723847" elapsed="0.000168"/>
</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-10-06T01:32:14.725150" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:14.725034" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.725017" elapsed="0.000199"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:14.725589" level="INFO">${karaf_connection_index} = 602</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-10-06T01:32:14.725362" elapsed="0.000254"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:14.725991" 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-10-06T01:32:14.725795" elapsed="0.000220"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:14.757175" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:14.726581" elapsed="0.030788"/>
</kw>
<msg time="2026-10-06T01:32:14.757526" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:14.757568" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.726169" elapsed="0.031433"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:14.833172" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "N "e "[78Cw "[A[78C
 "O "w "n "e "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:14.758224" elapsed="0.075140"/>
</kw>
<msg time="2026-10-06T01:32:14.833525" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:14.833567" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.757789" elapsed="0.075813"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:14.833935" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:14.833673" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.833655" elapsed="0.000378"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:14.834549" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "N "e "[78Cw "[A[78C
 "O "w "n "e "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:14.834215" elapsed="0.000419"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:14.834928" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:14.834713" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.834696" elapsed="0.000330"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:14.835056" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:14.837512" elapsed="0.000521"/>
</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-10-06T01:32:14.839262" elapsed="0.000481"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:14.841139" elapsed="0.000308"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:14.835849" elapsed="0.005665"/>
</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-10-06T01:32:14.835319" elapsed="0.006313"/>
</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="PASS" start="2026-10-06T01:32:14.724758" elapsed="0.116968"/>
</kw>
<msg time="2026-10-06T01:32:14.841826" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:14.841869" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.724163" elapsed="0.117741"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:14.842059" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:32:14.841974" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.841957" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:14.842452" elapsed="0.000023"/>
</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-10-06T01:32:14.842896" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:14.842964" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:32:14.723524" elapsed="0.119526"/>
</kw>
<msg time="2026-10-06T01:32:14.843133" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:14.843173" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.721629" elapsed="0.121578"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:14.843496" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:14.843276" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.843260" elapsed="0.000307"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:32:14.721493" elapsed="0.122096"/>
</iter>
<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-10-06T01:32:14.846173" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:14.846088" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.846070" elapsed="0.000167"/>
</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-10-06T01:32:14.847334" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:14.847250" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.847233" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:14.847789" level="INFO">${karaf_connection_index} = 604</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-10-06T01:32:14.847541" elapsed="0.000305"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:14.848193" 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-10-06T01:32:14.848009" elapsed="0.000208"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:14.881154" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:14.848797" elapsed="0.032535"/>
</kw>
<msg time="2026-10-06T01:32:14.881492" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:14.881534" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.848370" elapsed="0.033199"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:14.960602" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "N "e "[78Cw "[A[78C
 "O "w "n "e "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:14.882202" elapsed="0.078622"/>
</kw>
<msg time="2026-10-06T01:32:14.960994" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:14.961035" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.881755" elapsed="0.079315"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:14.961345" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:14.961142" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.961123" elapsed="0.000317"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:14.962018" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "N "e "[78Cw "[A[78C
 "O "w "n "e "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:14.961646" elapsed="0.000460"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:14.962363" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:14.962167" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.962150" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:14.962520" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:14.965022" elapsed="0.000468"/>
</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-10-06T01:32:14.966736" elapsed="0.000463"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:14.968376" elapsed="0.000348"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:14.963325" elapsed="0.005468"/>
</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-10-06T01:32:14.962828" elapsed="0.006099"/>
</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="PASS" start="2026-10-06T01:32:14.846993" elapsed="0.122012"/>
</kw>
<msg time="2026-10-06T01:32:14.969089" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:14.969129" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.846386" elapsed="0.122778"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:14.969320" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:32:14.969234" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.969217" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:14.969975" elapsed="0.000025"/>
</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-10-06T01:32:14.970277" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:14.970341" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:32:14.845780" elapsed="0.124646"/>
</kw>
<msg time="2026-10-06T01:32:14.970509" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:14.970548" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.843865" elapsed="0.126718"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:14.970900" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:14.970650" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.970634" elapsed="0.000339"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:32:14.843715" elapsed="0.127279"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:32:14.591180" elapsed="0.379841"/>
</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-10-06T01:32:14.589061" elapsed="0.382009"/>
</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-10-06T01:32:14.587144" elapsed="0.383975"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.586740" elapsed="0.384419"/>
</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-10-06T01:32:14.585727" elapsed="0.385481"/>
</kw>
<kw name="Delete Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:32:14.975182" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<doc>Delete bridge br01 in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:32:14.974033" elapsed="0.001184">Variable '${new_owner}' not found.</status>
</kw>
<doc>Delete bridge in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:32:14.585209" elapsed="0.390128">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s2-s2-t32" name="Create Bridge In Old Candidate and Verify After Recover" line="157">
<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-10-06T01:32:14.976726" elapsed="0.000235"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:32:14.976464" elapsed="0.000548"/>
</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-10-06T01:32:14.977963" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:14.977877" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.977858" elapsed="0.000168"/>
</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-10-06T01:32:14.979943" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:14.979859" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.979841" elapsed="0.000163"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:32:14.980940" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:32:14.980563" elapsed="0.000403"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:32:14.981386" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:32:14.981116" elapsed="0.000294"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:32:14.981451" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:32:14.981576" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:32:14.980207" elapsed="0.001393"/>
</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-10-06T01:32:14.984128" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:14.984044" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.984026" elapsed="0.000166"/>
</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-10-06T01:32:14.985285" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:14.985202" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:14.985185" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:14.985736" level="INFO">${karaf_connection_index} = 600</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-10-06T01:32:14.985490" elapsed="0.000272"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:14.986124" 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-10-06T01:32:14.985942" elapsed="0.000206"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:15.017802" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:14.986728" elapsed="0.031270"/>
</kw>
<msg time="2026-10-06T01:32:15.018158" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:15.018200" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.986303" elapsed="0.031932"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:15.095450" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "[78Cd "[A[78C
 "C "a "n "d "i "d "a "t "e "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:15.018857" elapsed="0.076784"/>
</kw>
<msg time="2026-10-06T01:32:15.095850" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:15.095894" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.018400" elapsed="0.077529"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:15.096205" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:15.096000" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.095982" elapsed="0.000318"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:15.096848" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "[78Cd "[A[78C
 "C "a "n "d "i "d "a "t "e "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:15.096480" elapsed="0.000462"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:15.097201" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:15.097004" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.096988" elapsed="0.000321"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:15.097339" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:15.099936" elapsed="0.000726"/>
</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-10-06T01:32:15.101932" elapsed="0.000455"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:15.103742" elapsed="0.000325"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:15.098200" elapsed="0.005934"/>
</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-10-06T01:32:15.097645" elapsed="0.006607"/>
</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="PASS" start="2026-10-06T01:32:14.984943" elapsed="0.119386"/>
</kw>
<msg time="2026-10-06T01:32:15.104411" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:15.104450" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.984338" elapsed="0.120148"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:15.104640" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:32:15.104555" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.104537" elapsed="0.000261"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:32:15.105127" elapsed="0.000024"/>
</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-10-06T01:32:15.105426" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:15.105490" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:32:14.983738" elapsed="0.121838"/>
</kw>
<msg time="2026-10-06T01:32:15.105658" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:15.105716" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.981956" elapsed="0.123795"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:15.106059" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:15.105834" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.105804" elapsed="0.000327"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:32:14.981803" elapsed="0.124349"/>
</iter>
<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-10-06T01:32:15.109800" elapsed="0.000026"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:15.109711" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.109692" elapsed="0.000186"/>
</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-10-06T01:32:15.110983" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:15.110899" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.110882" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:15.111415" level="INFO">${karaf_connection_index} = 602</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-10-06T01:32:15.111189" elapsed="0.000251"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:15.111798" 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-10-06T01:32:15.111600" elapsed="0.000241"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:15.143045" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:15.112410" elapsed="0.030810"/>
</kw>
<msg time="2026-10-06T01:32:15.143377" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:15.143418" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.111996" elapsed="0.031457"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:15.220030" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "[78Cd "[A[78C
 "C "a "n "d "i "d "a "t "e "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:15.144081" elapsed="0.076167"/>
</kw>
<msg time="2026-10-06T01:32:15.220410" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:15.220451" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.143615" elapsed="0.076870"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:15.220784" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:15.220555" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.220536" elapsed="0.000359"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:15.221411" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "[78Cd "[A[78C
 "C "a "n "d "i "d "a "t "e "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:15.221076" elapsed="0.000422"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:15.221776" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:15.221560" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.221543" elapsed="0.000342"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:15.221916" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:15.224372" elapsed="0.000513"/>
</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-10-06T01:32:15.226106" elapsed="0.000453"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:15.227987" elapsed="0.000308"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:15.222666" elapsed="0.005695"/>
</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-10-06T01:32:15.222179" elapsed="0.006300"/>
</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="PASS" start="2026-10-06T01:32:15.110602" elapsed="0.117954"/>
</kw>
<msg time="2026-10-06T01:32:15.228637" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:15.228692" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.110027" elapsed="0.118703"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:15.228900" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:32:15.228800" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.228782" elapsed="0.000195"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:15.229287" elapsed="0.000023"/>
</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-10-06T01:32:15.229580" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:15.229644" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:32:15.109401" elapsed="0.120438"/>
</kw>
<msg time="2026-10-06T01:32:15.229924" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:15.229964" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.106395" elapsed="0.123603"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:15.230282" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:15.230067" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.230051" elapsed="0.000302"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:32:15.106260" elapsed="0.124114"/>
</iter>
<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-10-06T01:32:15.232930" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:15.232843" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.232812" elapsed="0.000212"/>
</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-10-06T01:32:15.234134" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:15.234050" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.234033" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:15.234560" level="INFO">${karaf_connection_index} = 604</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-10-06T01:32:15.234337" elapsed="0.000248"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:15.234959" 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-10-06T01:32:15.234763" elapsed="0.000220"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:15.267321" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:15.235548" elapsed="0.031950"/>
</kw>
<msg time="2026-10-06T01:32:15.267656" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:15.267723" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.235138" elapsed="0.032621"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:15.353444" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "[78Cd "[A[78C
 "C "a "n "d "i "d "a "t "e "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:15.268359" elapsed="0.085271"/>
</kw>
<msg time="2026-10-06T01:32:15.353814" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:15.353871" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.267937" elapsed="0.085969"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:15.354181" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:15.353976" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.353958" elapsed="0.000317"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:15.354805" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "[78Cd "[A[78C
 "C "a "n "d "i "d "a "t "e "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:15.354452" elapsed="0.000455"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:15.355166" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:15.354969" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.354952" elapsed="0.000307"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:15.355290" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:15.357781" elapsed="0.000494"/>
</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-10-06T01:32:15.359496" elapsed="0.000479"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:15.361159" elapsed="0.000308"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:15.356083" elapsed="0.005451"/>
</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-10-06T01:32:15.355552" elapsed="0.006099"/>
</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="PASS" start="2026-10-06T01:32:15.233778" elapsed="0.128224"/>
</kw>
<msg time="2026-10-06T01:32:15.362086" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:15.362125" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.233176" elapsed="0.128984"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:15.362315" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:32:15.362229" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.362212" elapsed="0.000216"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:15.362763" elapsed="0.000025"/>
</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-10-06T01:32:15.363104" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:15.363171" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:32:15.232515" elapsed="0.130742"/>
</kw>
<msg time="2026-10-06T01:32:15.363340" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:15.363380" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.230616" elapsed="0.132798"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:15.363772" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:15.363482" elapsed="0.000354"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.363466" elapsed="0.000394"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:32:15.230481" elapsed="0.133400"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:32:14.981647" elapsed="0.382261"/>
</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-10-06T01:32:14.979535" elapsed="0.384423"/>
</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-10-06T01:32:14.977538" elapsed="0.386468"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:14.977156" elapsed="0.386891"/>
</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-10-06T01:32:14.976132" elapsed="0.387962"/>
</kw>
<kw name="Create Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:32:15.368209" level="FAIL">Variable '${original_candidate}' not found.</msg>
<arg>${original_candidate}</arg>
<doc>Create bridge br01 in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:32:15.366921" elapsed="0.001323">Variable '${original_candidate}' not found.</status>
</kw>
<doc>Create Bridge in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:32:14.975616" elapsed="0.392746">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s2-s2-t33" name="Create Port In Old Owner and Verify After Recover" line="161">
<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-10-06T01:32:15.369767" elapsed="0.000214"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:32:15.369507" elapsed="0.000525"/>
</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-10-06T01:32:15.370932" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:15.370844" elapsed="0.000134"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.370810" elapsed="0.000189"/>
</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-10-06T01:32:15.372896" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:15.372776" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.372759" elapsed="0.000198"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:32:15.373884" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:32:15.373508" elapsed="0.000402"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:32:15.374332" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:32:15.374060" elapsed="0.000296"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:32:15.374397" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:32:15.374522" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:32:15.373157" elapsed="0.001388"/>
</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-10-06T01:32:15.377080" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:15.376995" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.376977" elapsed="0.000166"/>
</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-10-06T01:32:15.378273" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:15.378189" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.378172" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:15.378724" level="INFO">${karaf_connection_index} = 600</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-10-06T01:32:15.378479" elapsed="0.000270"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:15.379107" 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-10-06T01:32:15.378926" elapsed="0.000205"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:15.410414" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:15.379712" elapsed="0.030914"/>
</kw>
<msg time="2026-10-06T01:32:15.410835" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:15.410880" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.379286" elapsed="0.031630"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:15.507296" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "[78CO "[A[78Cw
 "n "e "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:15.411615" elapsed="0.095870"/>
</kw>
<msg time="2026-10-06T01:32:15.507647" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:15.507714" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.411102" elapsed="0.096650"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:15.508084" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:15.507837" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.507807" elapsed="0.000376"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:15.508727" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "[78CO "[A[78Cw
 "n "e "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:15.508367" elapsed="0.000447"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:15.509099" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:15.508899" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.508882" elapsed="0.000313"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:15.509225" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:15.511726" elapsed="0.000494"/>
</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-10-06T01:32:15.513451" elapsed="0.000507"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:15.515329" elapsed="0.000306"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:15.510036" elapsed="0.005681"/>
</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-10-06T01:32:15.509494" elapsed="0.006354"/>
</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="PASS" start="2026-10-06T01:32:15.377931" elapsed="0.137995"/>
</kw>
<msg time="2026-10-06T01:32:15.516010" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:15.516050" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.377325" elapsed="0.138759"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:15.516240" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:32:15.516154" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.516137" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:32:15.516763" elapsed="0.000027"/>
</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-10-06T01:32:15.517111" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:15.517177" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:32:15.376688" elapsed="0.140575"/>
</kw>
<msg time="2026-10-06T01:32:15.517348" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:15.517387" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.374902" elapsed="0.142520"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:15.517725" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:15.517491" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.517475" elapsed="0.000323"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:32:15.374751" elapsed="0.143084"/>
</iter>
<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-10-06T01:32:15.520388" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:15.520302" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.520284" elapsed="0.000169"/>
</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-10-06T01:32:15.521558" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:15.521474" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.521457" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:15.522028" level="INFO">${karaf_connection_index} = 602</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-10-06T01:32:15.521788" elapsed="0.000265"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:15.522393" 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-10-06T01:32:15.522213" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:15.553284" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:15.523016" elapsed="0.030456"/>
</kw>
<msg time="2026-10-06T01:32:15.553630" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:15.553672" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.522570" elapsed="0.031160"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:15.646903" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "[78CO "[A[78Cw
 "n "e "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:15.554337" elapsed="0.092750"/>
</kw>
<msg time="2026-10-06T01:32:15.647246" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:15.647287" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.553910" elapsed="0.093412"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:15.647595" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:15.647392" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.647374" elapsed="0.000341"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:15.648246" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "[78CO "[A[78Cw
 "n "e "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:15.647908" elapsed="0.000423"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:15.648590" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:15.648393" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.648376" elapsed="0.000363"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:15.648770" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:15.651207" elapsed="0.000490"/>
</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-10-06T01:32:15.652926" elapsed="0.000452"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:15.654560" elapsed="0.000586"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:15.649540" elapsed="0.005673"/>
</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-10-06T01:32:15.649051" elapsed="0.006280"/>
</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="PASS" start="2026-10-06T01:32:15.521216" elapsed="0.134192"/>
</kw>
<msg time="2026-10-06T01:32:15.655490" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:15.655530" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.520602" elapsed="0.134963"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:15.655740" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:32:15.655634" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.655617" elapsed="0.000201"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:15.656144" elapsed="0.000024"/>
</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-10-06T01:32:15.656446" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:15.656510" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:32:15.520006" elapsed="0.136590"/>
</kw>
<msg time="2026-10-06T01:32:15.656768" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:15.656813" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.518086" elapsed="0.138774"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:15.657146" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:15.656931" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.656914" elapsed="0.000303"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:32:15.517948" elapsed="0.139290"/>
</iter>
<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-10-06T01:32:15.659889" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:15.659789" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.659770" elapsed="0.000183"/>
</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-10-06T01:32:15.661060" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:15.660976" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.660958" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:15.661488" level="INFO">${karaf_connection_index} = 604</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-10-06T01:32:15.661264" elapsed="0.000248"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:15.661883" 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-10-06T01:32:15.661670" elapsed="0.000237"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:15.695301" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:15.662470" elapsed="0.033006"/>
</kw>
<msg time="2026-10-06T01:32:15.695632" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:15.695696" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.662060" elapsed="0.033711"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:15.775713" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "[78CO "[A[78Cw
 "n "e "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:15.696376" elapsed="0.079536"/>
</kw>
<msg time="2026-10-06T01:32:15.776071" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:15.776112" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.695952" elapsed="0.080196"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:15.776420" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:15.776218" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.776200" elapsed="0.000315"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:15.777080" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "r "e "a "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "[78CO "[A[78Cw
 "n "e "r "[C "a "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:15.776719" elapsed="0.000446"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:15.777423" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:15.777226" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.777210" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:15.777546" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:15.780054" elapsed="0.000475"/>
</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-10-06T01:32:15.781810" elapsed="0.000464"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:15.783455" elapsed="0.000348"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:15.778337" elapsed="0.005549"/>
</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-10-06T01:32:15.777842" elapsed="0.006168"/>
</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="PASS" start="2026-10-06T01:32:15.660703" elapsed="0.123383"/>
</kw>
<msg time="2026-10-06T01:32:15.784167" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:15.784206" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.660102" elapsed="0.124139"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:15.784394" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:32:15.784310" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.784293" elapsed="0.000178"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:15.785010" elapsed="0.000024"/>
</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-10-06T01:32:15.785313" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:15.785378" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:32:15.659472" elapsed="0.125992"/>
</kw>
<msg time="2026-10-06T01:32:15.785546" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:15.785586" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.657482" elapsed="0.128138"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:15.785972" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:15.785705" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.785687" elapsed="0.000359"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:32:15.657347" elapsed="0.128721"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:32:15.374591" elapsed="0.411503"/>
</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-10-06T01:32:15.372470" elapsed="0.413676"/>
</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-10-06T01:32:15.370558" elapsed="0.415640"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.370176" elapsed="0.416063"/>
</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-10-06T01:32:15.369172" elapsed="0.417115"/>
</kw>
<kw name="Create Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:32:15.790425" level="FAIL">Variable '${original_candidate}' not found.</msg>
<arg>${original_candidate}</arg>
<doc>Add Port vx2 to bridge br01 in controller ${controller_index} and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:32:15.789152" elapsed="0.001307">Variable '${original_candidate}' not found.</status>
</kw>
<doc>Create Port in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:32:15.368633" elapsed="0.421947">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s2-s2-t34" name="Modify the destination IP of Port In Old Owner After Recover" line="165">
<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-10-06T01:32:15.792002" elapsed="0.000201"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:32:15.791746" elapsed="0.000507"/>
</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-10-06T01:32:15.793154" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:15.793068" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.793051" elapsed="0.000165"/>
</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-10-06T01:32:15.795082" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:15.795000" elapsed="0.000123"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.794983" elapsed="0.000161"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:32:15.796054" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:32:15.795713" elapsed="0.000367"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:32:15.796498" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:32:15.796228" elapsed="0.000294"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:32:15.796562" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:32:15.796704" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:32:15.795346" elapsed="0.001382"/>
</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-10-06T01:32:15.799279" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:15.799195" elapsed="0.000126"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.799178" elapsed="0.000164"/>
</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-10-06T01:32:15.800434" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:15.800351" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.800334" elapsed="0.000163"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:15.800902" level="INFO">${karaf_connection_index} = 600</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-10-06T01:32:15.800639" elapsed="0.000288"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:15.801283" 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-10-06T01:32:15.801087" elapsed="0.000221"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:15.835483" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:15.801923" elapsed="0.033741"/>
</kw>
<msg time="2026-10-06T01:32:15.835862" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:15.835904" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.801474" elapsed="0.034465"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:15.927035" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:15.836579" elapsed="0.090648"/>
</kw>
<msg time="2026-10-06T01:32:15.927386" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:15.927427" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.836151" elapsed="0.091311"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:15.927765" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:15.927533" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.927515" elapsed="0.000362"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:15.928393" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:15.928057" elapsed="0.000427"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:15.928759" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:15.928545" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.928528" elapsed="0.000358"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:15.928918" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:15.931380" elapsed="0.000516"/>
</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-10-06T01:32:15.933119" elapsed="0.000456"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:15.934989" elapsed="0.000310"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:15.929703" elapsed="0.005663"/>
</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-10-06T01:32:15.929187" elapsed="0.006296"/>
</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="PASS" start="2026-10-06T01:32:15.800095" elapsed="0.135464"/>
</kw>
<msg time="2026-10-06T01:32:15.935641" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:15.935697" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.799488" elapsed="0.136246"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:15.935901" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:32:15.935803" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.935787" elapsed="0.000192"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:32:15.936294" elapsed="0.000024"/>
</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-10-06T01:32:15.936594" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:15.936659" elapsed="0.000108"/>
</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="PASS" start="2026-10-06T01:32:15.798907" elapsed="0.137949"/>
</kw>
<msg time="2026-10-06T01:32:15.936942" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:15.936981" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.797104" elapsed="0.139913"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:15.937337" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:15.937085" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.937069" elapsed="0.000342"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:32:15.796960" elapsed="0.140473"/>
</iter>
<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-10-06T01:32:15.940017" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:15.939931" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.939913" elapsed="0.000167"/>
</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-10-06T01:32:15.941202" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:15.941119" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:15.941102" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:15.941628" level="INFO">${karaf_connection_index} = 602</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-10-06T01:32:15.941406" elapsed="0.000247"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:15.942028" 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-10-06T01:32:15.941844" elapsed="0.000208"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:15.975626" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:15.942618" elapsed="0.033265"/>
</kw>
<msg time="2026-10-06T01:32:15.976081" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:15.976132" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.942205" elapsed="0.033971"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:16.069630" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:15.976953" elapsed="0.092915"/>
</kw>
<msg time="2026-10-06T01:32:16.070037" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:16.070078" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.976390" elapsed="0.093722"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:16.070403" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:16.070188" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.070168" elapsed="0.000330"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:16.071077" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:16.070701" elapsed="0.000466"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:16.071426" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:16.071229" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.071213" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:16.071551" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:16.074096" elapsed="0.000475"/>
</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-10-06T01:32:16.075858" elapsed="0.000451"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:16.077516" elapsed="0.000558"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:16.072384" elapsed="0.005757"/>
</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-10-06T01:32:16.071884" elapsed="0.006372"/>
</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="PASS" start="2026-10-06T01:32:15.940859" elapsed="0.137523"/>
</kw>
<msg time="2026-10-06T01:32:16.078468" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:16.078507" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.940228" elapsed="0.138314"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:16.078719" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:32:16.078612" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.078595" elapsed="0.000202"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:16.079130" elapsed="0.000024"/>
</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-10-06T01:32:16.079433" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:16.079498" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:32:15.939584" elapsed="0.140000"/>
</kw>
<msg time="2026-10-06T01:32:16.079669" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:16.079801" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.937697" elapsed="0.142156"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:16.080147" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:16.079925" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.079908" elapsed="0.000310"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:32:15.937543" elapsed="0.142695"/>
</iter>
<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-10-06T01:32:16.082796" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:16.082708" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.082670" elapsed="0.000225"/>
</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-10-06T01:32:16.084104" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:16.084021" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.084004" elapsed="0.000162"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:16.084532" level="INFO">${karaf_connection_index} = 604</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-10-06T01:32:16.084308" elapsed="0.000249"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:16.084930" 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-10-06T01:32:16.084733" elapsed="0.000221"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:16.118057" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:16.085519" elapsed="0.032719"/>
</kw>
<msg time="2026-10-06T01:32:16.118403" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:16.118446" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:16.085107" elapsed="0.033374"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:16.209429" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:16.119123" elapsed="0.090498"/>
</kw>
<msg time="2026-10-06T01:32:16.209841" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:16.209885" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:16.118651" elapsed="0.091269"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:16.210199" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:16.209992" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.209974" elapsed="0.000357"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:16.210891" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "M "o "d "i "f "y "[C "t "h "e "[C "d "e "s "t "i "n "a "t "[78Ci "[A[78Co
 "n "[C "I "P "[C "o "f "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "O "w "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:16.210509" elapsed="0.000472"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:16.211243" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:16.211044" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.211027" elapsed="0.000311"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:16.211367" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:16.213886" elapsed="0.000475"/>
</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-10-06T01:32:16.215604" elapsed="0.000492"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:16.217270" elapsed="0.000305"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:16.212185" elapsed="0.005456"/>
</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-10-06T01:32:16.211634" elapsed="0.006149"/>
</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="PASS" start="2026-10-06T01:32:16.083747" elapsed="0.134130"/>
</kw>
<msg time="2026-10-06T01:32:16.217959" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:16.218000" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:16.083051" elapsed="0.134984"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:16.218189" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:32:16.218104" elapsed="0.000139"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.218087" elapsed="0.000179"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:16.218580" elapsed="0.000024"/>
</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-10-06T01:32:16.218938" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:16.219004" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:32:16.082391" elapsed="0.136699"/>
</kw>
<msg time="2026-10-06T01:32:16.219174" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:16.219213" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:16.080490" elapsed="0.138757"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:16.219531" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:16.219315" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.219299" elapsed="0.000303"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:32:16.080353" elapsed="0.139270"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:32:15.796777" elapsed="0.422873"/>
</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-10-06T01:32:15.794691" elapsed="0.425309"/>
</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-10-06T01:32:15.792797" elapsed="0.427260"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:15.792395" elapsed="0.427705"/>
</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-10-06T01:32:15.791393" elapsed="0.428758"/>
</kw>
<kw name="Modify the destination IP of Sample Port" owner="ClusterOvsdb">
<msg time="2026-10-06T01:32:16.223209" level="FAIL">Variable '${original_candidate}' not found.</msg>
<arg>${original_candidate}</arg>
<doc>Modify the dst ip of port vx2 in bridge br01 in controller ${controller_index}.</doc>
<status status="FAIL" start="2026-10-06T01:32:16.221878" elapsed="0.001367">Variable '${original_candidate}' not found.</status>
</kw>
<doc>Modify the dst ip of existing port in Owner.</doc>
<status status="FAIL" start="2026-10-06T01:32:15.790894" elapsed="0.432484">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s2-s2-t35" name="Verify Port Is Modified After Recover" line="169">
<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-10-06T01:32:16.224807" elapsed="0.000231"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:32:16.224540" elapsed="0.000551"/>
</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-10-06T01:32:16.226030" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:16.225942" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.225923" elapsed="0.000170"/>
</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-10-06T01:32:16.227994" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:16.227909" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.227891" elapsed="0.000168"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:32:16.228984" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:32:16.228622" elapsed="0.000389"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:32:16.229436" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:32:16.229162" elapsed="0.000299"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:32:16.229502" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:32:16.229628" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:32:16.228263" elapsed="0.001388"/>
</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-10-06T01:32:16.232255" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:16.232169" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.232151" elapsed="0.000169"/>
</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-10-06T01:32:16.233434" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:16.233347" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.233330" elapsed="0.000169"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:16.233915" level="INFO">${karaf_connection_index} = 600</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-10-06T01:32:16.233644" elapsed="0.000296"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:16.234291" 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-10-06T01:32:16.234106" elapsed="0.000209"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:16.266105" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:16.234923" elapsed="0.031357"/>
</kw>
<msg time="2026-10-06T01:32:16.266451" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:16.266493" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:16.234469" elapsed="0.032058"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:16.332862" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:16.267164" elapsed="0.065877"/>
</kw>
<msg time="2026-10-06T01:32:16.333197" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:16.333238" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:16.266719" elapsed="0.066553"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:16.333545" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:16.333342" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.333323" elapsed="0.000348"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:16.334224" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:16.333886" elapsed="0.000419"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:16.334563" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:16.334366" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.334350" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:16.334708" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:16.337135" elapsed="0.000468"/>
</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-10-06T01:32:16.338825" elapsed="0.000464"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:16.340447" elapsed="0.000557"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:16.335477" elapsed="0.005596"/>
</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-10-06T01:32:16.334988" elapsed="0.006200"/>
</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="PASS" start="2026-10-06T01:32:16.233086" elapsed="0.108178"/>
</kw>
<msg time="2026-10-06T01:32:16.341346" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:16.341385" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:16.232469" elapsed="0.108951"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:16.341573" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:32:16.341488" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.341471" elapsed="0.000180"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:32:16.342001" elapsed="0.000024"/>
</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-10-06T01:32:16.342299" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:16.342364" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:32:16.231875" elapsed="0.110573"/>
</kw>
<msg time="2026-10-06T01:32:16.342532" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:16.342571" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:16.230015" elapsed="0.112591"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:16.343003" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:16.342760" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.342657" elapsed="0.000418"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:32:16.229873" elapsed="0.113223"/>
</iter>
<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-10-06T01:32:16.346723" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:16.346620" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.346603" elapsed="0.000182"/>
</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-10-06T01:32:16.347900" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:16.347800" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.347783" elapsed="0.000179"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:16.348327" level="INFO">${karaf_connection_index} = 602</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-10-06T01:32:16.348105" elapsed="0.000247"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:16.348706" 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-10-06T01:32:16.348510" elapsed="0.000222"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:16.376049" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:16.349356" elapsed="0.026867"/>
</kw>
<msg time="2026-10-06T01:32:16.376380" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:16.376421" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:16.348937" elapsed="0.027518"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:16.423413" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:16.377078" elapsed="0.046517"/>
</kw>
<msg time="2026-10-06T01:32:16.423776" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:16.423818" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:16.376617" elapsed="0.047252"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:16.424150" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:16.423940" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.423922" elapsed="0.000323"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:16.424778" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:16.424423" elapsed="0.000449"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:16.425131" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:16.424935" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.424918" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:16.425254" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:16.427743" elapsed="0.000487"/>
</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-10-06T01:32:16.429450" elapsed="0.000490"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:16.431322" elapsed="0.000306"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:16.426063" elapsed="0.005646"/>
</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-10-06T01:32:16.425517" elapsed="0.006312"/>
</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="PASS" start="2026-10-06T01:32:16.347517" elapsed="0.084403"/>
</kw>
<msg time="2026-10-06T01:32:16.432001" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:16.432040" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:16.346948" elapsed="0.085127"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:16.432228" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:32:16.432145" elapsed="0.000136"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.432128" elapsed="0.000176"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:16.432611" elapsed="0.000024"/>
</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-10-06T01:32:16.433016" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:16.433081" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:32:16.346327" elapsed="0.086838"/>
</kw>
<msg time="2026-10-06T01:32:16.433294" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:16.433334" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:16.343341" elapsed="0.090028"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:16.433653" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:16.433437" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.433421" elapsed="0.000320"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:32:16.343204" elapsed="0.090558"/>
</iter>
<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-10-06T01:32:16.436288" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:16.436203" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.436186" elapsed="0.000166"/>
</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-10-06T01:32:16.437471" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:16.437387" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.437370" elapsed="0.000165"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:16.437942" level="INFO">${karaf_connection_index} = 604</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-10-06T01:32:16.437701" elapsed="0.000265"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:16.438306" 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-10-06T01:32:16.438126" elapsed="0.000253"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:16.471084" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:16.438988" elapsed="0.032274"/>
</kw>
<msg time="2026-10-06T01:32:16.471437" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:16.471480" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:16.438538" elapsed="0.032976"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:16.546754" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:16.472136" elapsed="0.074808"/>
</kw>
<msg time="2026-10-06T01:32:16.547103" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:16.547145" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:16.471693" elapsed="0.075486"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:16.547454" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:16.547250" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.547232" elapsed="0.000315"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:16.548097" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "V "e "r "i "f "y "[C "P "o "r "t "[C "I "s "[C "M "o "d "i "[78Cf "[A[78Ci
 "e "d "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:16.547745" elapsed="0.000433"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:16.548437" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:16.548240" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.548223" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:16.548561" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:16.551041" elapsed="0.000471"/>
</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-10-06T01:32:16.552763" elapsed="0.000464"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:16.554452" elapsed="0.000550"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:16.549345" elapsed="0.005724"/>
</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-10-06T01:32:16.548855" elapsed="0.006332"/>
</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="PASS" start="2026-10-06T01:32:16.437130" elapsed="0.118134"/>
</kw>
<msg time="2026-10-06T01:32:16.555346" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:16.555385" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:16.436500" elapsed="0.118921"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:16.555573" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:32:16.555490" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.555473" elapsed="0.000177"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:16.556014" elapsed="0.000027"/>
</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-10-06T01:32:16.556317" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:16.556380" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:32:16.435910" elapsed="0.120555"/>
</kw>
<msg time="2026-10-06T01:32:16.556548" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:16.556588" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:16.434021" elapsed="0.122602"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:16.556969" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:16.556738" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:16.556720" elapsed="0.000322"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:32:16.433884" elapsed="0.123179"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:32:16.229716" elapsed="0.327373"/>
</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-10-06T01:32:16.227579" elapsed="0.329560"/>
</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-10-06T01:32:16.225628" elapsed="0.331560"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:16.225239" elapsed="0.331989"/>
</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-10-06T01:32:16.224196" elapsed="0.333078"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:32:16.559536" level="INFO">${port_dictionary} = {'br01': '6', 'vx2': '3', '10.0.0.19': '1'}</msg>
<var>${port_dictionary}</var>
<arg>br01=6</arg>
<arg>vx2=3</arg>
<arg>10.0.0.19=1</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:32:16.559213" elapsed="0.000348"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:32:16.564103" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:32:16.562771" elapsed="0.001367">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:32:17.573738" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:32:17.570764" elapsed="0.003063">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:32:18.583310" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:32:18.580194" elapsed="0.003199">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:32:19.592931" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:32:19.590002" elapsed="0.003011">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:32:20.602241" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:32:20.599330" elapsed="0.002993">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-10-06T01:32:21.611992" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-10-06T01:32:21.609046" elapsed="0.003038">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<msg time="2026-10-06T01:32:21.612303" level="FAIL">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</msg>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-10-06T01:32:16.559783" elapsed="5.052814">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:32:16.558853" elapsed="5.054062">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify port is modified in all instances.</doc>
<status status="FAIL" start="2026-10-06T01:32:16.223698" elapsed="5.389513">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s2-s2-t36" name="Delete Port In Old Owner After Recover" line="173">
<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-10-06T01:32:21.616848" elapsed="0.000536"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:32:21.616253" elapsed="0.001244"/>
</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-10-06T01:32:21.619663" elapsed="0.000065"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:21.619440" elapsed="0.000358"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:21.619395" elapsed="0.000453"/>
</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-10-06T01:32:21.624282" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:21.624091" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:21.624051" elapsed="0.000371"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:32:21.626593" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:32:21.625827" elapsed="0.000824"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:32:21.627662" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:32:21.627052" elapsed="0.000696"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:32:21.627842" elapsed="0.000082"/>
</return>
<msg time="2026-10-06T01:32:21.628156" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:32:21.624933" elapsed="0.003274"/>
</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-10-06T01:32:21.634072" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:21.633847" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:21.633800" elapsed="0.000415"/>
</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-10-06T01:32:21.636831" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:21.636603" elapsed="0.000347"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:21.636565" elapsed="0.000435"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:21.638005" level="INFO">${karaf_connection_index} = 600</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-10-06T01:32:21.637326" elapsed="0.000735"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:21.638973" 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-10-06T01:32:21.638430" elapsed="0.000682"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:21.681512" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:21.640495" elapsed="0.041297"/>
</kw>
<msg time="2026-10-06T01:32:21.682046" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:21.682105" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:21.639471" elapsed="0.042692"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:21.751855" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "[78CO "[A[78Cw
 "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:21.683041" elapsed="0.069009"/>
</kw>
<msg time="2026-10-06T01:32:21.752206" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:21.752248" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:21.682396" elapsed="0.069887"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:21.752560" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:21.752354" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:21.752335" elapsed="0.000320"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:21.753228" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "[78CO "[A[78Cw
 "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:21.752865" elapsed="0.000451"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:21.753577" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:21.753378" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:21.753361" elapsed="0.000310"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:21.753723" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:21.756288" elapsed="0.000512"/>
</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-10-06T01:32:21.758076" elapsed="0.000490"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:21.759805" elapsed="0.000337"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:21.754548" elapsed="0.005660"/>
</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-10-06T01:32:21.754047" elapsed="0.006282"/>
</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="PASS" start="2026-10-06T01:32:21.636021" elapsed="0.124386"/>
</kw>
<msg time="2026-10-06T01:32:21.760490" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:21.760533" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:21.634542" elapsed="0.126029"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:21.761020" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-10-06T01:32:21.760640" elapsed="0.000437"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:21.760623" elapsed="0.000478"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:32:21.761427" elapsed="0.000024"/>
</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-10-06T01:32:21.761839" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:21.761923" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:32:21.633152" elapsed="0.128859"/>
</kw>
<msg time="2026-10-06T01:32:21.762133" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:21.762174" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:21.629007" elapsed="0.133202"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:21.762506" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:21.762278" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:21.762262" elapsed="0.000316"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:32:21.628638" elapsed="0.133961"/>
</iter>
<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-10-06T01:32:21.765187" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:21.765101" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:21.765084" elapsed="0.000167"/>
</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-10-06T01:32:21.766343" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:21.766259" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:21.766243" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:21.766796" level="INFO">${karaf_connection_index} = 602</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-10-06T01:32:21.766549" elapsed="0.000273"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:21.767183" 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-10-06T01:32:21.767000" elapsed="0.000207"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:21.804470" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:21.767794" elapsed="0.036850"/>
</kw>
<msg time="2026-10-06T01:32:21.804826" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:21.804867" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:21.767361" elapsed="0.037558"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:21.888787" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "[78CO "[A[78Cw
 "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:21.805505" elapsed="0.083476"/>
</kw>
<msg time="2026-10-06T01:32:21.889138" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:21.889180" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:21.805084" elapsed="0.084134"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:21.889499" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:21.889291" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:21.889272" elapsed="0.000321"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:21.890158" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "[78CO "[A[78Cw
 "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:21.889800" elapsed="0.000440"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:21.890498" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:21.890301" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:21.890285" elapsed="0.000307"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:21.890622" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:21.893110" elapsed="0.000477"/>
</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-10-06T01:32:21.894840" elapsed="0.000468"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:21.896540" elapsed="0.000549"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:21.891412" elapsed="0.005744"/>
</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-10-06T01:32:21.890919" elapsed="0.006354"/>
</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="PASS" start="2026-10-06T01:32:21.766002" elapsed="0.131348"/>
</kw>
<msg time="2026-10-06T01:32:21.897432" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:21.897472" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:21.765398" elapsed="0.132110"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:21.897663" elapsed="0.000041"/>
</return>
<status status="PASS" start="2026-10-06T01:32:21.897577" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:21.897560" elapsed="0.000198"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:21.898088" elapsed="0.000024"/>
</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-10-06T01:32:21.898386" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:21.898450" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:32:21.764787" elapsed="0.133748"/>
</kw>
<msg time="2026-10-06T01:32:21.898619" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:21.898659" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:21.762916" elapsed="0.135867"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:21.899088" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:21.898856" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:21.898839" elapsed="0.000321"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:32:21.762762" elapsed="0.136419"/>
</iter>
<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-10-06T01:32:21.901815" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:21.901728" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:21.901710" elapsed="0.000169"/>
</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-10-06T01:32:21.903005" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:21.902919" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:21.902884" elapsed="0.000184"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:21.903431" level="INFO">${karaf_connection_index} = 604</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-10-06T01:32:21.903211" elapsed="0.000245"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:21.903811" 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-10-06T01:32:21.903613" elapsed="0.000222"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:21.936787" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:21.904418" elapsed="0.032570"/>
</kw>
<msg time="2026-10-06T01:32:21.937145" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:21.937187" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:21.904006" elapsed="0.033215"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:22.008043" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "[78CO "[A[78Cw
 "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:21.937828" elapsed="0.070392"/>
</kw>
<msg time="2026-10-06T01:32:22.008409" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:22.008451" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:21.937385" elapsed="0.071102"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.008784" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:22.008557" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.008539" elapsed="0.000342"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:22.009445" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "P "o "r "t "[C "I "n "[C "O "l "d "[C "[78CO "[A[78Cw
 "n "e "r "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:22.009097" elapsed="0.000430"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.009812" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:22.009590" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.009573" elapsed="0.000356"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:22.009960" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:22.012411" elapsed="0.000515"/>
</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-10-06T01:32:22.014226" elapsed="0.000474"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:22.015927" elapsed="0.000303"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:22.010740" elapsed="0.005556"/>
</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-10-06T01:32:22.010226" elapsed="0.006186"/>
</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="PASS" start="2026-10-06T01:32:21.902618" elapsed="0.113870"/>
</kw>
<msg time="2026-10-06T01:32:22.016570" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:22.016609" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:21.902047" elapsed="0.114597"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:22.017013" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:32:22.016926" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.016893" elapsed="0.000197"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.017403" elapsed="0.000023"/>
</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-10-06T01:32:22.017723" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:22.017789" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:32:21.901414" elapsed="0.116461"/>
</kw>
<msg time="2026-10-06T01:32:22.017975" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:22.018015" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:21.899430" elapsed="0.118620"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.018347" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:22.018119" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.018103" elapsed="0.000315"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:32:21.899289" elapsed="0.119150"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:32:21.628321" elapsed="0.390146"/>
</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-10-06T01:32:21.623379" elapsed="0.395141"/>
</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-10-06T01:32:21.618828" elapsed="0.399743"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:21.617868" elapsed="0.400976"/>
</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-10-06T01:32:21.615399" elapsed="0.403510"/>
</kw>
<kw name="Delete Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:32:22.023026" level="FAIL">Variable '${original_candidate}' not found.</msg>
<arg>${original_candidate}</arg>
<doc>Delete port vx2 from bridge br01 in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:32:22.021708" elapsed="0.001352">Variable '${original_candidate}' not found.</status>
</kw>
<doc>Delete port in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:32:21.614180" elapsed="0.409007">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s2-s2-t37" name="Delete Bridge In Old Owner And Verify After Recover" line="177">
<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-10-06T01:32:22.024630" elapsed="0.000215"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:32:22.024382" elapsed="0.000513"/>
</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-10-06T01:32:22.025803" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:22.025713" elapsed="0.000132"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.025694" elapsed="0.000172"/>
</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-10-06T01:32:22.027751" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:22.027649" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.027632" elapsed="0.000182"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:32:22.028723" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:32:22.028384" elapsed="0.000366"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:32:22.029187" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:32:22.028916" elapsed="0.000295"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:32:22.029253" elapsed="0.000025"/>
</return>
<msg time="2026-10-06T01:32:22.029376" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:32:22.028027" elapsed="0.001372"/>
</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-10-06T01:32:22.032004" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:22.031918" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.031886" elapsed="0.000182"/>
</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-10-06T01:32:22.033180" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:22.033096" elapsed="0.000125"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.033079" elapsed="0.000164"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:22.033609" level="INFO">${karaf_connection_index} = 600</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-10-06T01:32:22.033386" elapsed="0.000247"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:22.034012" 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-10-06T01:32:22.033813" elapsed="0.000224"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:22.067782" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:22.034606" elapsed="0.033368"/>
</kw>
<msg time="2026-10-06T01:32:22.068139" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:22.068181" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.034192" elapsed="0.034024"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:22.153818" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "[78Cd "[A[78C
 "O "w "n "e "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:22.068831" elapsed="0.085188"/>
</kw>
<msg time="2026-10-06T01:32:22.154178" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:22.154220" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.068379" elapsed="0.085911"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.154571" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:22.154364" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.154345" elapsed="0.000321"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:22.155226" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "[78Cd "[A[78C
 "O "w "n "e "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:22.154872" elapsed="0.000441"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.155574" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:22.155375" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.155359" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:22.155715" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:22.158199" elapsed="0.000497"/>
</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-10-06T01:32:22.159945" elapsed="0.000459"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:22.161593" elapsed="0.000552"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:22.156491" elapsed="0.005721"/>
</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-10-06T01:32:22.155998" elapsed="0.006332"/>
</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="PASS" start="2026-10-06T01:32:22.032821" elapsed="0.129587"/>
</kw>
<msg time="2026-10-06T01:32:22.162491" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:22.162531" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.032216" elapsed="0.130350"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:22.162739" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:32:22.162635" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.162618" elapsed="0.000199"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:32:22.163148" elapsed="0.000024"/>
</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-10-06T01:32:22.163453" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:22.163517" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:32:22.031595" elapsed="0.132008"/>
</kw>
<msg time="2026-10-06T01:32:22.163776" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:22.163820" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.029738" elapsed="0.134123"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.164162" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:22.163943" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.163926" elapsed="0.000307"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:32:22.029584" elapsed="0.134669"/>
</iter>
<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-10-06T01:32:22.166801" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:22.166714" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.166675" elapsed="0.000189"/>
</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-10-06T01:32:22.167990" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:22.167891" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.167874" elapsed="0.000212"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:22.168461" level="INFO">${karaf_connection_index} = 602</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-10-06T01:32:22.168233" elapsed="0.000253"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:22.168844" 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-10-06T01:32:22.168645" elapsed="0.000223"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:22.203058" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:22.169450" elapsed="0.033798"/>
</kw>
<msg time="2026-10-06T01:32:22.203405" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:22.203447" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.169037" elapsed="0.034444"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:22.284922" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "[78Cd "[A[78C
 "O "w "n "e "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:22.204107" elapsed="0.081010"/>
</kw>
<msg time="2026-10-06T01:32:22.285274" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:22.285315" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.203644" elapsed="0.081705"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.285621" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:22.285418" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.285400" elapsed="0.000341"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:22.286274" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "[78Cd "[A[78C
 "O "w "n "e "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:22.285941" elapsed="0.000418"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.286616" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:22.286421" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.286405" elapsed="0.000322"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:22.286759" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:22.289197" elapsed="0.000466"/>
</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-10-06T01:32:22.290891" elapsed="0.000458"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:22.292512" elapsed="0.000569"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:22.287528" elapsed="0.005620"/>
</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-10-06T01:32:22.287040" elapsed="0.006222"/>
</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="PASS" start="2026-10-06T01:32:22.167605" elapsed="0.125733"/>
</kw>
<msg time="2026-10-06T01:32:22.293420" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:22.293460" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.167028" elapsed="0.126467"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:22.293650" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-10-06T01:32:22.293565" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.293547" elapsed="0.000196"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.294979" elapsed="0.000032"/>
</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-10-06T01:32:22.295339" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:22.295405" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:32:22.166397" elapsed="0.129095"/>
</kw>
<msg time="2026-10-06T01:32:22.295576" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:22.295616" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.164498" elapsed="0.131153"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.295972" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:22.295738" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.295722" elapsed="0.000323"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:32:22.164362" elapsed="0.131705"/>
</iter>
<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-10-06T01:32:22.298592" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:22.298507" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.298490" elapsed="0.000166"/>
</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-10-06T01:32:22.299792" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:22.299704" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.299665" elapsed="0.000190"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:22.300234" level="INFO">${karaf_connection_index} = 604</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-10-06T01:32:22.300012" elapsed="0.000247"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:22.300596" 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-10-06T01:32:22.300417" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:22.332155" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:22.301226" elapsed="0.031104"/>
</kw>
<msg time="2026-10-06T01:32:22.332488" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:22.332530" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.300792" elapsed="0.031773"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:22.409147" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "[78Cd "[A[78C
 "O "w "n "e "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:22.333187" elapsed="0.076149"/>
</kw>
<msg time="2026-10-06T01:32:22.409492" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:22.409533" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.332747" elapsed="0.076821"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.409867" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:22.409638" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.409620" elapsed="0.000357"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:22.410495" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "D "e "l "e "t "e "[C "B "r "i "d "g "e "[C "I "n "[C "O "l "[78Cd "[A[78C
 "O "w "n "e "r "[C "A "n "d "[C "V "e "r "i "f "y "[C "A "f "t "e "r "[C "R "e "c "o "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:22.410159" elapsed="0.000423"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.410862" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:22.410645" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.410628" elapsed="0.000343"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:22.411033" elapsed="0.000027"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:22.413497" elapsed="0.000515"/>
</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-10-06T01:32:22.415233" elapsed="0.000477"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:22.416924" elapsed="0.000309"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:22.411822" elapsed="0.005478"/>
</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-10-06T01:32:22.411303" elapsed="0.006114"/>
</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="PASS" start="2026-10-06T01:32:22.299425" elapsed="0.118070"/>
</kw>
<msg time="2026-10-06T01:32:22.417577" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:22.417616" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.298822" elapsed="0.118829"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:22.418027" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:32:22.417938" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.417899" elapsed="0.000205"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.418418" elapsed="0.000024"/>
</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-10-06T01:32:22.418739" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:22.418806" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:32:22.298210" elapsed="0.120734"/>
</kw>
<msg time="2026-10-06T01:32:22.419066" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:22.419107" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.296316" elapsed="0.122826"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.419429" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:22.419212" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.419195" elapsed="0.000306"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:32:22.296177" elapsed="0.123345"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:32:22.029447" elapsed="0.390101"/>
</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-10-06T01:32:22.027357" elapsed="0.392246"/>
</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-10-06T01:32:22.025440" elapsed="0.394215"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.025056" elapsed="0.394761"/>
</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-10-06T01:32:22.024040" elapsed="0.395831"/>
</kw>
<kw name="Delete Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-10-06T01:32:22.424090" level="FAIL">Variable '${original_candidate}' not found.</msg>
<arg>${original_candidate}</arg>
<doc>Delete bridge br01 in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-10-06T01:32:22.422708" elapsed="0.001418">Variable '${original_candidate}' not found.</status>
</kw>
<doc>Delete bridge in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-10-06T01:32:22.023481" elapsed="0.400776">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s2-s2-t38" name="Cleans Up Test Environment For Next Suite" line="181">
<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-10-06T01:32:22.425819" elapsed="0.000226"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-10-06T01:32:22.425556" elapsed="0.000541"/>
</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-10-06T01:32:22.427001" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:22.426899" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.426881" elapsed="0.000183"/>
</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-10-06T01:32:22.428985" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:22.428886" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.428870" elapsed="0.000178"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:32:22.429968" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:32:22.429603" elapsed="0.000391"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:32:22.430417" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:32:22.430145" elapsed="0.000296"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:32:22.430482" elapsed="0.000026"/>
</return>
<msg time="2026-10-06T01:32:22.430607" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:32:22.429249" elapsed="0.001381"/>
</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-10-06T01:32:22.434238" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:22.434151" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.434133" elapsed="0.000168"/>
</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-10-06T01:32:22.435408" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:22.435320" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.435303" elapsed="0.000167"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:22.435862" level="INFO">${karaf_connection_index} = 600</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-10-06T01:32:22.435613" elapsed="0.000275"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:22.436246" 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-10-06T01:32:22.436066" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:22.469220" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:22.436853" elapsed="0.032547"/>
</kw>
<msg time="2026-10-06T01:32:22.469575" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:22.469617" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.436425" elapsed="0.033228"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:22.541726" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "l "e "a "n "s "[C "U "p "[C "T "e "s "t "[C "E "n "v "i "[78Cr "[A[78Co
 "n "m "e "n "t "[C "F "o "r "[C "N "e "x "t "[C "S "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:22.470271" elapsed="0.071648"/>
</kw>
<msg time="2026-10-06T01:32:22.542080" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:22.542121" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.469837" elapsed="0.072319"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.542430" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:22.542227" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.542209" elapsed="0.000314"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:22.543077" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "l "e "a "n "s "[C "U "p "[C "T "e "s "t "[C "E "n "v "i "[78Cr "[A[78Co
 "n "m "e "n "t "[C "F "o "r "[C "N "e "x "t "[C "S "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:22.542723" elapsed="0.000437"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.543418" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:22.543222" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.543205" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:22.543540" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:22.546062" elapsed="0.000470"/>
</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-10-06T01:32:22.547781" elapsed="0.000467"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:22.549604" elapsed="0.000338"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:22.544366" elapsed="0.005645"/>
</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-10-06T01:32:22.543819" elapsed="0.006310"/>
</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="PASS" start="2026-10-06T01:32:22.435059" elapsed="0.115148"/>
</kw>
<msg time="2026-10-06T01:32:22.550289" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:22.550329" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.434449" elapsed="0.115915"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:22.550517" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:32:22.550433" elapsed="0.000138"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.550416" elapsed="0.000177"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<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="NOT RUN" start="2026-10-06T01:32:22.551002" elapsed="0.000024"/>
</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-10-06T01:32:22.551301" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:22.551366" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:32:22.433843" elapsed="0.117609"/>
</kw>
<msg time="2026-10-06T01:32:22.551534" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:22.551573" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.431008" elapsed="0.120600"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.551923" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:22.551691" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.551660" elapsed="0.000337"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:32:22.430840" elapsed="0.121178"/>
</iter>
<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-10-06T01:32:22.554575" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:22.554490" elapsed="0.000127"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.554472" elapsed="0.000166"/>
</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-10-06T01:32:22.555767" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:22.555659" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.555642" elapsed="0.000188"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:22.556211" level="INFO">${karaf_connection_index} = 602</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-10-06T01:32:22.555986" elapsed="0.000250"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:22.556576" 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-10-06T01:32:22.556395" elapsed="0.000205"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:22.591409" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:22.557201" elapsed="0.034400"/>
</kw>
<msg time="2026-10-06T01:32:22.591784" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:22.591827" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.556770" elapsed="0.035093"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:22.670743" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "l "e "a "n "s "[C "U "p "[C "T "e "s "t "[C "E "n "v "i "[78Cr "[A[78Co
 "n "m "e "n "t "[C "F "o "r "[C "N "e "x "t "[C "S "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:22.592472" elapsed="0.078502"/>
</kw>
<msg time="2026-10-06T01:32:22.671142" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:22.671184" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.592049" elapsed="0.079170"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.671492" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:22.671290" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.671272" elapsed="0.000314"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:22.672147" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "l "e "a "n "s "[C "U "p "[C "T "e "s "t "[C "E "n "v "i "[78Cr "[A[78Co
 "n "m "e "n "t "[C "F "o "r "[C "N "e "x "t "[C "S "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:22.671790" elapsed="0.000440"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.672488" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:22.672292" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.672275" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:22.672611" 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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:22.675125" elapsed="0.000472"/>
</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-10-06T01:32:22.676848" elapsed="0.000464"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:22.678500" elapsed="0.000551"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:22.673415" elapsed="0.005703"/>
</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-10-06T01:32:22.672892" elapsed="0.006341"/>
</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="PASS" start="2026-10-06T01:32:22.555399" elapsed="0.123912"/>
</kw>
<msg time="2026-10-06T01:32:22.679392" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:22.679432" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.554802" elapsed="0.124665"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:22.679623" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-10-06T01:32:22.679538" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.679521" elapsed="0.000198"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.680047" elapsed="0.000024"/>
</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-10-06T01:32:22.680348" elapsed="0.000022"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:22.680412" elapsed="0.000014"/>
</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="PASS" start="2026-10-06T01:32:22.554190" elapsed="0.126305"/>
</kw>
<msg time="2026-10-06T01:32:22.680578" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:22.680617" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.552265" elapsed="0.128386"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.681068" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:22.680811" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.680793" elapsed="0.000347"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:32:22.552129" elapsed="0.129033"/>
</iter>
<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-10-06T01:32:22.683635" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:22.683550" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.683533" elapsed="0.000189"/>
</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-10-06T01:32:22.684883" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:22.684796" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.684778" elapsed="0.000185"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-10-06T01:32:22.685330" level="INFO">${karaf_connection_index} = 604</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-10-06T01:32:22.685106" elapsed="0.000249"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:22.685708" 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-10-06T01:32:22.685513" elapsed="0.000220"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-10-06T01:32:22.717102" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "p "s "t "r "e "a "m "- "c "l "[78Cu "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-10-06T01:32:22.686309" elapsed="0.030978"/>
</kw>
<msg time="2026-10-06T01:32:22.717444" level="INFO">${status_write} = PASS</msg>
<msg time="2026-10-06T01:32:22.717486" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "o "v "s "d "b "- "u "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.685886" elapsed="0.031634"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-10-06T01:32:22.799241" level="INFO">"t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "l "e "a "n "s "[C "U "p "[C "T "e "s "t "[C "E "n "v "i "[78Cr "[A[78Co
 "n "m "e "n "t "[C "F "o "r "[C "N "e "x "t "[C "S "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-10-06T01:32:22.718140" elapsed="0.081281"/>
</kw>
<msg time="2026-10-06T01:32:22.799581" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-10-06T01:32:22.799622" level="INFO">${message_wait} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.717700" elapsed="0.081957"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.799981" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:22.799753" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.799734" elapsed="0.000343"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:22.800600" level="INFO"> "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r "[C "E "x "t "e "n "s "i "o "n ". "C "l "e "a "n "s "[C "U "p "[C "T "e "s "t "[C "E "n "v "i "[78Cr "[A[78Co
 "n "m "e "n "t "[C "F "o "r "[C "N "e "x "t "[C "S "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:22.800255" elapsed="0.000445"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.800975" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:22.800763" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.800746" elapsed="0.000323"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-10-06T01:32:22.801100" elapsed="0.000026"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:22.803534" elapsed="0.000516"/>
</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-10-06T01:32:22.805252" elapsed="0.000467"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:22.806894" elapsed="0.000321"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:22.801877" elapsed="0.005404"/>
</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-10-06T01:32:22.801364" elapsed="0.006032"/>
</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="PASS" start="2026-10-06T01:32:22.684509" elapsed="0.122963"/>
</kw>
<msg time="2026-10-06T01:32:22.807554" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:22.807594" level="INFO">${message} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.683922" elapsed="0.123708"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-10-06T01:32:22.807999" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-10-06T01:32:22.807896" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.807877" elapsed="0.000202"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.808429" elapsed="0.000024"/>
</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-10-06T01:32:22.808747" elapsed="0.000023"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-10-06T01:32:22.808812" elapsed="0.000015"/>
</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="PASS" start="2026-10-06T01:32:22.683259" elapsed="0.125639"/>
</kw>
<msg time="2026-10-06T01:32:22.808999" level="INFO">${status} = PASS</msg>
<msg time="2026-10-06T01:32:22.809039" level="INFO">${output} =  "t "e "r "i "n "g ". "t "x "t ". "S "o "u "t "h "b "o "u "n "d "[C "C "l "u "s "t "e "r ". "S "o "u "t "h "b "o "u "n "...</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.681409" elapsed="0.127665"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.809359" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:22.809143" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.809127" elapsed="0.000303"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:32:22.681269" elapsed="0.128183"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:32:22.430697" elapsed="0.378781"/>
</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-10-06T01:32:22.428574" elapsed="0.380952"/>
</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-10-06T01:32:22.426625" elapsed="0.382950"/>
</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 errorw.</doc>
<status status="PASS" start="2026-10-06T01:32:22.426242" elapsed="0.383372"/>
</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-10-06T01:32:22.425219" elapsed="0.384441"/>
</kw>
<kw name="Configure Exit OVSDB Connection" owner="ClusterOvsdb">
<kw name="Clean OVSDB Test Environment" owner="OVSDB">
<kw name="Clean Mininet System" owner="Utils">
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:22.812838" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:22.812586" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:22.812569" elapsed="0.000378"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:22.813276" 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-10-06T01:32:22.813370" 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-10-06T01:32:22.813144" elapsed="0.000251"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:22.813891" level="INFO">Attempting to execute command "sudo mn -c" on remote system "10.30.170.234" 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-10-06T01:32:22.813582" elapsed="0.000367"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:22.814441" level="INFO">${conn_id} = 745</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-10-06T01:32:22.814131" elapsed="0.000335"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:32:22.815317" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:32:22.815387" 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-10-06T01:32:22.815051" elapsed="0.000358"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:22.815556" elapsed="0.000299"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:32:22.816628" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:32:23.210558" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:32:06 UTC 2026

  System load:  0.01               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:32:08 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:32:22.816398" elapsed="0.394335"/>
</kw>
<msg time="2026-10-06T01:32:23.210800" 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-10-06T01:32:22.816030" elapsed="0.394836"/>
</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-10-06T01:32:22.814659" elapsed="0.396310"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:32:23.211376" level="INFO">Executing command 'sudo mn -c'.</msg>
<msg time="2026-10-06T01:32:24.441637" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:32:24.441923" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:32:24.442048" level="INFO">${stderr} = *** Removing excess controllers/ofprotocols/ofdatapaths/pings/noxes
killall controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec iv...</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-10-06T01:32:23.211194" elapsed="1.230907"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:24.442465" elapsed="0.000499"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:24.444092" level="INFO">*** Removing excess controllers/ofprotocols/ofdatapaths/pings/noxes
killall controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec ivs ryu-manager 2&gt; /dev/null
killall -9 controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec ivs ryu-manager 2&gt; /dev/null
pkill -9 -f "sudo mnexec"
*** Removing junk from /tmp
rm -f /tmp/vconn* /tmp/vlogs* /tmp/*.out /tmp/*.log
*** Removing old X11 tunnels
*** Removing excess kernel datapaths
ps ax | egrep -o 'dp[0-9]+' | sed 's/dp/nl:/'
***  Removing OVS datapaths
ovs-vsctl --timeout=1 list-br
ovs-vsctl --timeout=1 list-br
*** Removing all links of the pattern foo-ethX
ip link show | egrep -o '([-_.[:alnum:]]+-eth[[:digit:]]+)'
ip link show
*** Killing stale mininet node processes
pkill -9 -f mininet:
*** Shutting down stale tunnels
pkill -9 -f Tunnel=Ethernet
pkill -9 -f .ssh/mn
rm -f ~/.ssh/mn/*
*** Cleanup complete.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:24.443462" elapsed="0.000746"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:32:24.444597" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:24.444366" elapsed="0.000363"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:24.444318" elapsed="0.000463"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:32:24.445102" elapsed="0.000060"/>
</return>
<status status="PASS" start="2026-10-06T01:32:24.444893" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:24.444860" elapsed="0.000421"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:32:24.445348" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:24.447006" elapsed="0.000630"/>
</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-10-06T01:32:24.448095" elapsed="0.000693"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:24.449136" elapsed="0.000206"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:24.446053" elapsed="0.003398"/>
</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-10-06T01:32:22.812162" elapsed="1.637444"/>
</kw>
<msg time="2026-10-06T01:32:24.449745" 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-10-06T01:32:22.811430" elapsed="1.638422"/>
</kw>
<arg>${system}</arg>
<arg>sudo mn -c</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:32:22.811024" elapsed="1.639012"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:24.454171" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:24.453599" elapsed="0.000693"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:24.453559" elapsed="0.000784"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:24.455092" 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-10-06T01:32:24.455298" 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-10-06T01:32:24.454794" elapsed="0.000558"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:24.456463" level="INFO">Attempting to execute command "sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh" on remote system "10.30.170.234" 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-10-06T01:32:24.455794" elapsed="0.000843"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:24.457781" level="INFO">${conn_id} = 747</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-10-06T01:32:24.457088" elapsed="0.000750"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:32:24.459785" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:32:24.459965" 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-10-06T01:32:24.459179" elapsed="0.000838"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:24.460345" elapsed="0.000678"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:32:24.462789" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:32:24.875630" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:32:06 UTC 2026

  System load:  0.01               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:32:23 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:32:24.462243" elapsed="0.413487"/>
</kw>
<msg time="2026-10-06T01:32:24.875786" 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-10-06T01:32:24.461382" elapsed="0.414459"/>
</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-10-06T01:32:24.458291" elapsed="0.417629"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:32:24.876292" level="INFO">Executing command 'sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh'.</msg>
<msg time="2026-10-06T01:32:24.929917" level="INFO">Command exited with return code -1.</msg>
<msg time="2026-10-06T01:32:24.930160" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:32:24.930247" level="INFO">${stderr} = </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-10-06T01:32:24.876139" elapsed="0.054157"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:24.930639" elapsed="0.000881"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:24.932568" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:24.932043" elapsed="0.000611"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:32:24.933067" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:24.932833" elapsed="0.000329"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:24.932789" elapsed="0.000421"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:32:24.933492" elapsed="0.000053"/>
</return>
<status status="PASS" start="2026-10-06T01:32:24.933314" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:24.933285" elapsed="0.000376"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:32:24.933764" elapsed="0.000030"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:24.935358" elapsed="0.000691"/>
</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-10-06T01:32:24.936460" elapsed="0.000334"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:24.937197" elapsed="0.000202"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:24.934412" elapsed="0.003096"/>
</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-10-06T01:32:24.452601" elapsed="0.485059"/>
</kw>
<msg time="2026-10-06T01:32:24.937796" 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-10-06T01:32:24.451385" elapsed="0.486514"/>
</kw>
<arg>${system}</arg>
<arg>sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:32:24.450388" elapsed="0.487745"/>
</kw>
<arg>${tools_system}</arg>
<status status="PASS" start="2026-10-06T01:32:22.810695" elapsed="2.127631"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:24.942588" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:24.942070" elapsed="0.000668"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:24.942031" elapsed="0.000760"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:24.943537" 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-10-06T01:32:24.943774" 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-10-06T01:32:24.943272" elapsed="0.000560"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:24.944962" level="INFO">Attempting to execute command "sudo ovs-vsctl del-manager" on remote system "10.30.170.234" 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-10-06T01:32:24.944270" elapsed="0.000789"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:24.946150" level="INFO">${conn_id} = 749</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-10-06T01:32:24.945444" elapsed="0.000759"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:32:24.948368" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:32:24.948547" 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-10-06T01:32:24.947790" elapsed="0.000808"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:24.949132" elapsed="0.000691"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:32:24.951626" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:32:25.370336" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:32:06 UTC 2026

  System load:  0.01               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:32:24 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:32:24.951117" elapsed="0.419306"/>
</kw>
<msg time="2026-10-06T01:32:25.370483" 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-10-06T01:32:24.950213" elapsed="0.420330"/>
</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-10-06T01:32:24.946627" elapsed="0.424000"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:32:25.371013" level="INFO">Executing command 'sudo ovs-vsctl del-manager'.</msg>
<msg time="2026-10-06T01:32:25.404246" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:32:25.404388" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:32:25.404472" level="INFO">${stderr} = </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-10-06T01:32:25.370848" elapsed="0.033679"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:25.404924" elapsed="0.000446"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:25.406407" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:25.405859" elapsed="0.000634"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:32:25.406882" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:25.406641" elapsed="0.000367"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:25.406597" elapsed="0.000461"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:32:25.407350" elapsed="0.000054"/>
</return>
<status status="PASS" start="2026-10-06T01:32:25.407166" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:25.407133" elapsed="0.000389"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:32:25.407590" elapsed="0.000029"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:25.409206" elapsed="0.000653"/>
</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-10-06T01:32:25.410331" elapsed="0.000425"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:25.411105" elapsed="0.000206"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:25.408275" elapsed="0.003142"/>
</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-10-06T01:32:24.940963" elapsed="0.470609"/>
</kw>
<msg time="2026-10-06T01:32:25.411706" 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-10-06T01:32:24.939733" elapsed="0.472081"/>
</kw>
<arg>${tools_system}</arg>
<arg>sudo ovs-vsctl del-manager</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:32:24.938743" elapsed="0.473261"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:25.416181" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:25.415593" elapsed="0.000710"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:25.415553" elapsed="0.000800"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:25.417101" 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-10-06T01:32:25.417302" 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-10-06T01:32:25.416811" elapsed="0.000545"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:25.418468" level="INFO">Attempting to execute command "sudo /usr/share/openvswitch/scripts/ovs-ctl stop" on remote system "10.30.170.234" 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-10-06T01:32:25.417800" elapsed="0.000763"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:25.419642" level="INFO">${conn_id} = 751</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-10-06T01:32:25.419004" elapsed="0.000690"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:32:25.420833" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:32:25.420929" 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-10-06T01:32:25.420478" elapsed="0.000499"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:25.421184" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:32:25.422660" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:32:25.834274" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:32:06 UTC 2026

  System load:  0.01               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:32:25 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:32:25.422344" elapsed="0.412157"/>
</kw>
<msg time="2026-10-06T01:32:25.834646" 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-10-06T01:32:25.421818" elapsed="0.412998"/>
</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-10-06T01:32:25.419982" elapsed="0.415050"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:32:25.835994" level="INFO">Executing command 'sudo /usr/share/openvswitch/scripts/ovs-ctl stop'.</msg>
<msg time="2026-10-06T01:32:25.930027" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:32:25.930262" level="INFO">${stdout} =  * Exiting ovs-vswitchd (8387)
 * Exiting ovsdb-server (8370)</msg>
<msg time="2026-10-06T01:32:25.930353" level="INFO">${stderr} = </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-10-06T01:32:25.835540" elapsed="0.094862"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:25.930877" elapsed="0.000422"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:25.932430" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:25.931831" elapsed="0.000687"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:32:25.932973" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:25.932708" elapsed="0.000368"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:25.932631" elapsed="0.000495"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:32:25.933414" elapsed="0.000055"/>
</return>
<status status="PASS" start="2026-10-06T01:32:25.933233" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:25.933202" elapsed="0.000387"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:32:25.933658" elapsed="0.000060"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:25.935317" elapsed="0.000702"/>
</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-10-06T01:32:25.936427" elapsed="0.000349"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:25.937112" elapsed="0.000200"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:25.934370" elapsed="0.003049"/>
</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-10-06T01:32:25.414598" elapsed="0.522976"/>
</kw>
<msg time="2026-10-06T01:32:25.937710" 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-10-06T01:32:25.413401" elapsed="0.524414"/>
</kw>
<arg>${tools_system}</arg>
<arg>sudo /usr/share/openvswitch/scripts/ovs-ctl stop</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:32:25.412404" elapsed="0.525594"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:25.942236" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:25.941661" elapsed="0.000696"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:25.941622" elapsed="0.000786"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:25.943155" 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-10-06T01:32:25.943358" 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-10-06T01:32:25.942860" elapsed="0.000554"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:25.944642" level="INFO">Attempting to execute command "sudo rm -rf /etc/openvswitch/conf.db" on remote system "10.30.170.234" 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-10-06T01:32:25.943919" elapsed="0.000854"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:25.945876" level="INFO">${conn_id} = 753</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-10-06T01:32:25.945186" elapsed="0.000876"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:32:25.948080" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:32:25.948243" 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-10-06T01:32:25.947349" elapsed="0.000944"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:25.948626" elapsed="0.000701"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:32:25.951169" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:32:26.375285" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:32:06 UTC 2026

  System load:  0.01               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:32:25 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:32:25.950603" elapsed="0.424840"/>
</kw>
<msg time="2026-10-06T01:32:26.375537" 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-10-06T01:32:25.949739" elapsed="0.425887"/>
</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-10-06T01:32:25.946503" elapsed="0.429272"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:32:26.376151" level="INFO">Executing command 'sudo rm -rf /etc/openvswitch/conf.db'.</msg>
<msg time="2026-10-06T01:32:26.399426" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:32:26.399568" level="INFO">${stdout} = </msg>
<msg time="2026-10-06T01:32:26.399622" level="INFO">${stderr} = </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-10-06T01:32:26.376001" elapsed="0.023651"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:26.399897" elapsed="0.000280"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:26.400802" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:26.400459" elapsed="0.000397"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:32:26.401094" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:26.400946" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:26.400919" elapsed="0.000265"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:32:26.401362" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-10-06T01:32:26.401249" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:26.401230" elapsed="0.000238"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:32:26.401510" elapsed="0.000018"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:26.402475" elapsed="0.000412"/>
</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-10-06T01:32:26.403185" elapsed="0.000192"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:26.403571" elapsed="0.000190"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:26.401923" elapsed="0.001909"/>
</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-10-06T01:32:25.940663" elapsed="0.463265"/>
</kw>
<msg time="2026-10-06T01:32:26.404008" 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-10-06T01:32:25.939390" elapsed="0.464681"/>
</kw>
<arg>${tools_system}</arg>
<arg>sudo rm -rf /etc/openvswitch/conf.db</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:32:25.938395" elapsed="0.465774"/>
</kw>
<kw name="Run Command On Mininet" 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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:26.406714" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:26.406370" elapsed="0.000419"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:26.406345" elapsed="0.000475"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:26.407266" 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-10-06T01:32:26.407392" 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-10-06T01:32:26.407100" elapsed="0.000326"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:26.408121" level="INFO">Attempting to execute command "sudo /usr/share/openvswitch/scripts/ovs-ctl start" on remote system "10.30.170.234" 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-10-06T01:32:26.407702" elapsed="0.000478"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-10-06T01:32:26.408847" level="INFO">${conn_id} = 755</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-10-06T01:32:26.408422" elapsed="0.000459"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-10-06T01:32:26.410022" level="INFO">Length is 0.</msg>
<msg time="2026-10-06T01:32:26.410119" 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-10-06T01:32:26.409646" elapsed="0.000503"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:26.410406" elapsed="0.000420"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-10-06T01:32:26.412153" level="INFO">Logging into '10.30.170.234:22' as 'jenkins'.</msg>
<msg time="2026-10-06T01:32:26.810202" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-187-generic x86_64)

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

 System information as of Tue Oct  6 01:32:06 UTC 2026

  System load:  0.01               Processes:             105
  Usage of /:   19.8% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.234
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

5 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

14 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.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Tue Oct  6 01:32:26 2026 from 10.30.171.212
[?2004h[jenkins@releng-54530-105-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-10-06T01:32:26.411574" elapsed="0.398703"/>
</kw>
<msg time="2026-10-06T01:32:26.810331" 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-10-06T01:32:26.411066" elapsed="0.399317"/>
</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-10-06T01:32:26.409158" elapsed="0.401300"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-10-06T01:32:26.810815" level="INFO">Executing command 'sudo /usr/share/openvswitch/scripts/ovs-ctl start'.</msg>
<msg time="2026-10-06T01:32:26.924238" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-10-06T01:32:26.924458" level="INFO">${stdout} =  * /etc/openvswitch/conf.db does not exist
 * Creating empty database /etc/openvswitch/conf.db
 * Starting ovsdb-server
 * system ID not configured, please use --system-id
 * Configuring Open vSwitch ...</msg>
<msg time="2026-10-06T01:32:26.924548" level="INFO">${stderr} = </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-10-06T01:32:26.810655" elapsed="0.113939"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:26.925004" elapsed="0.000386"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:26.926414" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:26.925872" elapsed="0.000627"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:32:26.926878" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-10-06T01:32:26.926642" elapsed="0.000354"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:26.926600" elapsed="0.000444"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-10-06T01:32:26.927333" elapsed="0.000054"/>
</return>
<status status="PASS" start="2026-10-06T01:32:26.927152" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:26.927120" elapsed="0.000382"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-10-06T01:32:26.927569" elapsed="0.000028"/>
</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>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:26.929142" elapsed="0.000647"/>
</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-10-06T01:32:26.930215" elapsed="0.000294"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-10-06T01:32:26.930846" elapsed="0.000215"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-10-06T01:32:26.928238" elapsed="0.002928"/>
</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-10-06T01:32:26.405769" elapsed="0.525546"/>
</kw>
<msg time="2026-10-06T01:32:26.931419" 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-10-06T01:32:26.405035" elapsed="0.526483"/>
</kw>
<arg>${tools_system}</arg>
<arg>sudo /usr/share/openvswitch/scripts/ovs-ctl start</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-10-06T01:32:26.404414" elapsed="0.527255"/>
</kw>
<arg>${TOOLS_SYSTEM_IP}</arg>
<doc>General Use Keyword attempting to sanitize test environment for OVSDB related
tests. Not every step will always be neccessary, but should not cause any problems for
any new ovsdb test suites.</doc>
<status status="PASS" start="2026-10-06T01:32:22.810345" elapsed="4.121471"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-10-06T01:32:26.932941" level="INFO">${dictionary} = {'ovsdb://uuid': '0'}</msg>
<var>${dictionary}</var>
<arg>ovsdb://uuid=0</arg>
<doc>Creates and returns a dictionary based on the given `items`.</doc>
<status status="PASS" start="2026-10-06T01:32:26.932261" elapsed="0.000755"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-10-06T01:32:26.940461" level="INFO">${return_list_reference} = [1, 2, 3]</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-10-06T01:32:26.939666" elapsed="0.000852"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-10-06T01:32:26.941522" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-10-06T01:32:26.940886" elapsed="0.000690"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-10-06T01:32:26.941668" elapsed="0.000091"/>
</return>
<msg time="2026-10-06T01:32:26.942010" level="INFO">${index_list} = [1, 2, 3]</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-10-06T01:32:26.938739" elapsed="0.003323"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:26.948455" 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 variable.</doc>
<status status="PASS" start="2026-10-06T01:32:26.947818" elapsed="0.000692"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:32:26.948603" elapsed="0.000059"/>
</return>
<msg time="2026-10-06T01:32:26.948911" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:32:26.946997" elapsed="0.001986"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:26.951650" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:26.951158" elapsed="0.000616"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:26.952723" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:26.952210" elapsed="0.000604"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:32:26.966594" level="INFO">GET Request : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0jkac5u2t9muy1nienyvg0ul5j3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:32:26.966923" level="INFO">GET Response : url=http://10.30.171.109:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '144'} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt; 
 </msg>
<msg time="2026-10-06T01:32:26.967177" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:32:26.953475" elapsed="0.013756"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:26.952950" elapsed="0.014370"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:26.967760" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:26.967375" elapsed="0.000519"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:26.952913" elapsed="0.015026"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:26.970864" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:26.970088" elapsed="0.000898"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:26.969503" elapsed="0.001554"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:26.969464" elapsed="0.001643"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:26.972645" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:26.971772" elapsed="0.001006"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:26.971220" elapsed="0.001630"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:26.971186" elapsed="0.001714"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:26.974164" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:26.973306" elapsed="0.000915"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:26.974867" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:26.974364" elapsed="0.000644"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:26.976054" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:26.975406" elapsed="0.000703"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:26.975059" elapsed="0.001122"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:26.974327" elapsed="0.001899"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:26.977395" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:26.976597" elapsed="0.000854"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:26.978190" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:26.977665" elapsed="0.000642"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:26.979345" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:26.978730" elapsed="0.000668"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:26.978358" elapsed="0.001113"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:26.977625" elapsed="0.001891"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:26.979859" elapsed="0.000681"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:32:26.981453" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:26.980921" elapsed="0.000586"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:32:26.981871" elapsed="0.000499"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:32:26.968720" elapsed="0.013775"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:32:26.982847" elapsed="0.000056"/>
</return>
<status status="PASS" start="2026-10-06T01:32:26.982631" elapsed="0.000367"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:26.982594" elapsed="0.000456"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:26.983360" elapsed="0.000044"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:32:26.983499" elapsed="0.000031"/>
</return>
<msg time="2026-10-06T01:32:26.984042" level="INFO">${response_text} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:32:26.949645" elapsed="0.034458"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:32:26.984206" elapsed="0.000056"/>
</return>
<msg time="2026-10-06T01:32:26.984476" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;ovsdb:1&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:32:26.946006" elapsed="0.038526"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:32:26.987367" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:32:26.986262" elapsed="0.001243"/>
</kw>
<var name="${item}">ovsdb://uuid</var>
<status status="PASS" start="2026-10-06T01:32:26.985883" elapsed="0.001704"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:32:26.985618" elapsed="0.002034"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:32:26.985116" elapsed="0.002679"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-10-06T01:32:26.942433" elapsed="0.045430"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:26.993831" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:26.993188" elapsed="0.000700"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:32:26.994007" elapsed="0.000061"/>
</return>
<msg time="2026-10-06T01:32:26.994286" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:32:26.992425" elapsed="0.001912"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:26.997480" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:26.996981" elapsed="0.000623"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:26.998569" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:26.998079" elapsed="0.000579"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:32:27.014383" level="INFO">GET Request : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0onugjjevyaz5kav2bikiz01a3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:32:27.014608" level="INFO">GET Response : url=http://10.30.171.171:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:32:27.014934" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:32:26.999356" elapsed="0.015660"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:26.998830" elapsed="0.016275"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:27.015500" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:27.015161" elapsed="0.000469"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:26.998791" elapsed="0.016915"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:27.018563" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:27.017815" elapsed="0.000842"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:27.017261" elapsed="0.001500"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:27.017221" elapsed="0.001592"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:27.020130" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:27.019474" elapsed="0.000748"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:27.018927" elapsed="0.001365"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:27.018892" elapsed="0.001451"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:27.021540" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:27.020748" elapsed="0.000848"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:27.022248" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:27.021772" elapsed="0.000594"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:27.023411" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:27.022793" elapsed="0.000672"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:27.022416" elapsed="0.001123"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:27.021733" elapsed="0.001851"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:27.024798" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:27.024008" elapsed="0.000846"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:27.025477" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:27.025024" elapsed="0.000569"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:27.026617" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:27.026038" elapsed="0.000635"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:27.025643" elapsed="0.001134"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:27.024983" elapsed="0.001839"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:27.027158" elapsed="0.000619"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:32:27.028350" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:27.028043" elapsed="0.000341"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:32:27.028592" elapsed="0.000314"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:32:27.016447" elapsed="0.012647"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:32:27.029298" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-10-06T01:32:27.029183" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:27.029160" elapsed="0.000246"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:27.029598" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:32:27.029707" elapsed="0.000021"/>
</return>
<msg time="2026-10-06T01:32:27.030022" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:32:26.995499" elapsed="0.034559"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:32:27.030121" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:32:27.030289" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:32:26.991450" elapsed="0.038871"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:32:27.033984" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:32:27.033512" elapsed="0.000559"/>
</kw>
<var name="${item}">ovsdb://uuid</var>
<status status="PASS" start="2026-10-06T01:32:27.033288" elapsed="0.000836"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:32:27.031037" elapsed="0.003125"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:32:27.030704" elapsed="0.003525"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-10-06T01:32:26.988066" elapsed="0.046207"/>
</iter>
<iter>
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:27.037834" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:27.037435" elapsed="0.000434"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-10-06T01:32:27.037929" elapsed="0.000053"/>
</return>
<msg time="2026-10-06T01:32:27.038118" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-10-06T01:32:27.036984" elapsed="0.001167"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:27.039815" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:27.039480" elapsed="0.000393"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:27.040461" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:27.040155" elapsed="0.000361"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-10-06T01:32:27.055551" level="INFO">GET Request : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01ql1g6bmmojox1juom7bkbzdam3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-10-06T01:32:27.055720" level="INFO">GET Response : url=http://10.30.170.97:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '78'} 
 body={"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}} 
 </msg>
<msg time="2026-10-06T01:32:27.055852" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-10-06T01:32:27.040940" elapsed="0.014945"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:27.040603" elapsed="0.015337"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:27.056205" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:27.055993" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:27.040580" elapsed="0.015734"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:27.058124" level="INFO">{"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:27.057597" elapsed="0.000586"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:27.057265" elapsed="0.000963"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:27.057241" elapsed="0.001018"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-10-06T01:32:27.059090" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-10-06T01:32:27.058656" elapsed="0.000491"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:27.058328" elapsed="0.000864"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:27.058307" elapsed="0.000916"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:27.059974" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:27.059457" elapsed="0.000553"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:27.060381" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:27.060100" elapsed="0.000356"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:27.061118" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:27.060730" elapsed="0.000423"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:27.060490" elapsed="0.000709"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:27.060077" elapsed="0.001150"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-10-06T01:32:27.061953" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:27.061461" elapsed="0.000560"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:27.062404" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-10-06T01:32:27.062118" elapsed="0.000359"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-10-06T01:32:27.063211" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="PASS" start="2026-10-06T01:32:27.062798" elapsed="0.000449"/>
</kw>
<status status="PASS" start="2026-10-06T01:32:27.062552" elapsed="0.000742"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:27.062094" elapsed="0.001227"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-10-06T01:32:27.063521" elapsed="0.000455"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-10-06T01:32:27.064502" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given `lists` together and returns the result.</doc>
<status status="PASS" start="2026-10-06T01:32:27.064198" elapsed="0.000338"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the `value` is not found from `list`.</doc>
<status status="PASS" start="2026-10-06T01:32:27.064766" elapsed="0.000312"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-10-06T01:32:27.056773" elapsed="0.008383"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-10-06T01:32:27.065357" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-10-06T01:32:27.065244" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-10-06T01:32:27.065221" elapsed="0.000243"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-10-06T01:32:27.065657" elapsed="0.000048"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-10-06T01:32:27.065768" elapsed="0.000020"/>
</return>
<msg time="2026-10-06T01:32:27.066090" level="INFO">${response_text} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-10-06T01:32:27.038565" elapsed="0.027559"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-10-06T01:32:27.066189" elapsed="0.000035"/>
</return>
<msg time="2026-10-06T01:32:27.066357" level="INFO">${data} = {"network-topology:network-topology":{"topology":[{"topology-id":"ovsdb:1"}]}}</msg>
<var>${data}</var>
<arg>uri=${uri}</arg>
<arg>member_index=${index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-10-06T01:32:27.036371" elapsed="0.030018"/>
</kw>
<kw name="Check Item Occurrence" owner="Utils">
<for flavor="IN">
<iter>
<kw name="Should Contain X Times" owner="BuiltIn">
<msg time="2026-10-06T01:32:27.068079" level="INFO">Item found from container 0 times.</msg>
<arg>${string}</arg>
<arg>${item}</arg>
<arg>${dictionary_item_occurrence}[${item}]</arg>
<doc>Fails if the `container` does not contain the `item` `count` times.</doc>
<status status="PASS" start="2026-10-06T01:32:27.067605" elapsed="0.000559"/>
</kw>
<var name="${item}">ovsdb://uuid</var>
<status status="PASS" start="2026-10-06T01:32:27.067173" elapsed="0.001043"/>
</iter>
<var>${item}</var>
<value>@{dictionary_item_occurrence}</value>
<status status="PASS" start="2026-10-06T01:32:27.067027" elapsed="0.001227"/>
</for>
<arg>${data}</arg>
<arg>${dictionary}</arg>
<doc>Check string for occurrences of items expressed in a list of dictionaries {item=occurrences}. 0 occurences means item is not present.</doc>
<status status="PASS" start="2026-10-06T01:32:27.066674" elapsed="0.001646"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-10-06T01:32:27.034386" elapsed="0.033978"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-10-06T01:32:26.942178" elapsed="0.126221"/>
</for>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary {'ovsdb://uuid': '0'}.</doc>
<status status="PASS" start="2026-10-06T01:32:26.937557" elapsed="0.130905"/>
</kw>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-10-06T01:32:26.933448" elapsed="0.135079"/>
</kw>
<doc>Cleans up test environment, close existing sessions.</doc>
<status status="PASS" start="2026-10-06T01:32:22.809983" elapsed="4.258624"/>
</kw>
<doc>Cleans up test environment, close existing sessions in teardown.</doc>
<status status="PASS" start="2026-10-06T01:32:22.424669" elapsed="4.644108"/>
</test>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<msg time="2026-10-06T01:32:27.069619" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects </doc>
<status status="PASS" start="2026-10-06T01:32:27.069518" elapsed="0.000406"/>
</kw>
<doc>Test suite for Ovsdb Southbound Cluster - Candidate failover and recover</doc>
<status status="FAIL" start="2026-10-06T01:29:39.112364" elapsed="167.957625"/>
</suite>
<status status="FAIL" start="2026-10-06T01:26:43.381381" elapsed="343.689952"/>
</suite>
<status status="FAIL" start="2026-10-06T01:20:50.558496" elapsed="696.514282"/>
</suite>
<statistics>
<total>
<stat pass="38" fail="126" skip="0">All Tests</stat>
</total>
<tag>
</tag>
<suite>
<stat name="ovsdb-upstream-clustering.txt" id="s1" pass="38" fail="126" skip="0">ovsdb-upstream-clustering.txt</stat>
<stat name="Southbound Cluster" id="s1-s1" pass="19" fail="63" skip="0">ovsdb-upstream-clustering.txt.Southbound Cluster</stat>
<stat name="Ovsdb Southbound Cluster" id="s1-s1-s1" pass="12" fail="32" skip="0">ovsdb-upstream-clustering.txt.Southbound Cluster.Ovsdb Southbound Cluster</stat>
<stat name="Southbound Cluster Extension" id="s1-s1-s2" pass="7" fail="31" skip="0">ovsdb-upstream-clustering.txt.Southbound Cluster.Southbound Cluster Extension</stat>
<stat name="Southbound Cluster" id="s1-s2" pass="19" fail="63" skip="0">ovsdb-upstream-clustering.txt.Southbound Cluster</stat>
<stat name="Ovsdb Southbound Cluster" id="s1-s2-s1" pass="12" fail="32" skip="0">ovsdb-upstream-clustering.txt.Southbound Cluster.Ovsdb Southbound Cluster</stat>
<stat name="Southbound Cluster Extension" id="s1-s2-s2" pass="7" fail="31" skip="0">ovsdb-upstream-clustering.txt.Southbound Cluster.Southbound Cluster Extension</stat>
</suite>
</statistics>
<errors>
</errors>
</robot>
